2011-12-19 10 views
10

統合テスト(JDK 6)では、すべての発信TCP接続を捕まえて、それらをモックしようとしています。私はjava.net.Socket#setSocketImplFactory()メソッドを使用するように見えます。現時点では問題ありませんが、もとのJDKで提供されているSocketImplクラスをインスタンス化するために、元のファクトリにアクセスする方法を理解できません。ほとんどの場合、私は接続を自由に外出させたいので、これが必要です。あなたは、この問題に関するいくつかのマニュアル/ガイドライン/指示を提案できますか?発信ソケット接続を擬似する方法は?

+0

この質問は関連しています:http://stackoverflow.com/questions/2083647/writing-a-java-net-socketimplfactory – yegor256

+0

関連する:http://stackoverflow.com/questions/2257901/mock-runtime-getruntime – Rich

答えて

0

javadocによると、SocketFactory#getDefault()を使用して、ご使用の環境用のデフォルトのSocketFactoryを取得できるはずです。

ところで:あなたはまたのSocketImplFactoryは、基本的にはデッドエンドであることを宣言し、このRFE /バグで見たいと思うかもしれません:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4245730

+0

あなたはそうですが、 'SocketImpl'クラスのインスタンスを生成する' SocketImplFactory'について説明しています。クラス 'java.net.Socket'はこれとは何の関係もありません。 – yegor256

0

Socketクラスのソースコードを見てみると、まったくオリジナルの工場がありません - コンストラクタはfactoryがnullかどうかを確認し、そうであればimplを新しいPlainSocketImpl()に割り当てます。

+0

私が理解する限り、「ソケットクラスのソースコード」はありません。すべてのJDKには独自のソースがあり、実装ごとに異なる場合があります。 – yegor256

+0

おそらくそれは私の素朴なものでしたが、Oracle JDK 6を使用していると仮定しました。この場合、特定のソースがあります。これを行い、取得する元のファクトリがないことを説明するために使用しました。あなたがそれを行うことができれば、私は@Peter Lawreyがサービスを使うことが最良の方法であることに同意します。 Runtime.getRuntime()で同じことをしなければならなかった。 http://stackoverflow.com/questions/2257901 – Rich

+0

これは、ソケットを使用しているアプリケーション内のサードパーティのライブラリです。私はそれをどうにか変更することはできません。 – yegor256

1

Socketを嘲笑するのではなく、SocketがSocketサービスと対話するのではなく、これにより、書かれたすべてのデータを取得し、任意の方法で返信することができます。これは、同じテストで、場合によっては同じスレッドで実行できます。

関連する問題