2017-11-17 8 views
1

リモートRESTサーバーにいくつかのJSONデータを取得する要求を出し、そのJSONからIDを抽出し、別のエンドポイントの同じサーバーに別の要求を行うためにIDを使用するJavaメソッドをテストしようとしています。Javaで同じテストで複数のエンドポイントを持つRESTサーバーをモックするにはどうすればよいですか?

MockitoのMockRestServiceServerを使用すると、1つのエンドポイントへの1つのリクエストを期待しているサーバーを模擬してテストすることはできますが、それを使用して独自の期待値と応答を持つ一連の定義済みエンドポイントを持つサーバーを作成できません。

複数の異なる要求をリモートサーバーに送信する単一の機能をテストする目的で、複数のエンドポイントを持つサーバーを模擬するにはどうすればよいですか。

+0

私はあなたの質問を一貫して書いてきたと信じていますが、なぜ複数のリクエストを行うだけでは困るのですか?最初のエンドポイントにリクエストを送信し、JSONレスポンスを解析し、以前に解析されたJSONを使用して別のエンドポイントに新しいリクエストを送信し、必要な回数だけ繰り返します。 MockitoのMockRestServiceServerにはサーバーのAPIにいくつかのコードが含まれていますので、そのドキュメントを掘り下げてみてください。 –

+1

2つのAPI呼び出しを行うWebスクリプトで1つの関数をテストしようとしています。私が知る限り、MockRestServiceServerに2つのエンドポイントを先制的に定義してから、このメソッドを実行して、関数が呼び出されたときに両方のエンドポイントがモックサーバーに存在するようにすることはできません。 – AdvilPill

+0

@AdvillPillさて、良い短期間の修正は、それぞれが独自のエンドポイントを持つ2つのMockRestServiceServersを実行するだけかもしれません。 –

答えて

-1

私の回答は、あなたがSpringBootを使用していると仮定していますが、その考え方は一般的に適用できます。

クラスをRestOperationsインターフェイスに依存させることで、テスト時にスタブを渡すことができます。

クラスの下でテスト

public class Foo { 
    private final RestOperations restOperations; 

    public Foo(RestOperations restOperations) { 
    this.restOperations = restOperations; 
    } 
} 

テスト

public void test() { 
    Foo foo = new Foo(new MyStub()); 
    } 

は抽象化ではなく、具体的な実装に依存します。

2

私は実際に私の問題を解決することができました。

MockRestServiceServer.MockRestServiceServerBuilder builder = 
    MockRestServiceServer.bindTo(restTemplate); 
builder.ignoreExpectOrder(true); 
MockRestServiceServer server = builder.build(); 

、その基本となるRequestExpectationManagerフィールドを行うことにより:トリックは、手動でそのように、()メソッドをcreateServer(RestTemplate)またはbindTo(RestTemplate).buildを使用するのではなく、あなたのMockRestServiceServerを構築するために、独自のMockRestServiceServerBuilderを作成することですMockRestServiceServerはUnorderedRequestExpectationManagerとして初期化され、リクエストの順序に関係なくリクエストを一致させることができます。これは私の頭痛の多くを解決しました。

関連する問題