3

MyRestClientサードパーティの RESTful API をヒットし、サーバーから返された HTTP 応答で何らかの処理を行う必要がある Java クラス ( ) を作成しました。現在、さまざまな状況下でこのクラスが正しく動作することを確認するために、サードパーティ API との間で一連の成功した統合テスト (JUnit基礎となる testng lib として使用)を作成しようとしています。MyRestClient

  • すべてが完璧です (RESTful API 呼び出しは正しく、サーバーは意味のある応答を返します)
  • 不正な API 呼び出しとサーバーがアプリケーション層のエラー コードを返す
  • 403、404、500 など、200 以外のさまざまな HTTP コードが返される
  • ネットワーク接続なし
  • ...等。

そのリストの 4 番目の項目 (「ネットワーク接続なし」) は、私が現在立ち往生しているものです。Jersey実際の REST 呼び出しを実行するために内部で使用していますが、Jersey 自体はjava.net.*. 可能であれば、shouldThrowExceptionOnBadNetworkConnection()テスト メソッドの実行中にネットワーク接続を起動するジャージー/Java の機能を「中断」してから、次のテスト メソッドが正常に動作できるように「オン」に戻したいと考えています。

これを行うように見えるCharles Proxyを見てきましたが、実行時にそれを管理するためのJavaライブラリはないようです。

だから私は尋ねます:特定の統合テストのためにJavaネットワークを「オフ」にするにはどうすればよいですか? 前もって感謝します。

4

1 に答える 1

0

URL を返す保護されたメソッドを宣言し、プライベート フィールドの場合は代わりにそれを使用するようにすることで、MyRestClient をテスト可能にします。

JUnit テストでは、そのメソッドをオーバーライドする匿名クラスはジャンクを返します。

MyRestClient willFail = new MyRestClient() {
    protected String getUrl() {
        return "http://not.a.real.address";
    }
}

同様のことができるモックライブラリもあります

于 2012-12-23T14:23:54.937 に答える