12

Spring Boot を使用してマイクロサービスを構築すると、広範で非常に読みやすい統合テストを簡単に作成し、MockRestServiceServer.

同様のアプローチを使用して追加の統合テストを実行する方法はありZuulProxyますか? 私が達成しZuulProxyたいのは、すべてのサーバーが期待どおりに動作することを転送して検証するリモート サーバーをモックできるようにすることZuulFitlerです。ただし、 Netflix からZuulProxy使用RestClientしています (非推奨のように思われますか?)。これRestTemplateは、再構成できるものを当然使用せずMockRestServiceServer、現在、プロキシされた要求に対してリモート サービスからの応答をモックする良い方法を見つけることができません。

API セッション キーの作成を処理し、API ゲートウェイと同様に動作するマイクロ サービスがあります。転送は Zuul Proxy を使用して基盤となる公開されたサービスに行われ、Zuul フィルターはセッション キーが有効かどうかを検出します。したがって、統合テストは有効なセッションを作成し、「統合/テスト」などの偽のエンドポイントに転送します。

「統合/テスト」が新しいエンドポイントであることを指定するには、構成プロパティを on に設定します。Zuul 転送ではなく、@WebIntegrationTest経由で処理されるすべてのサービスを正常にモックできます。RestTemplate

フォワードターゲットサービスのモックを達成するための最良の方法は何ですか?

4

2 に答える 2

8

WireMockをチェックしてください。Spring Cloud Zuul プロジェクトの統合レベルのテストに使用しています。

import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class TestClass {
    @Rule
    public WireMockRule serviceA = new WireMockRule(WireMockConfiguration.options().dynamicPort());

    @Before
    public void before() {
        serviceA.stubFor(get(urlPathEqualTo("/test-path/test")).willReturn(aResponse()
            .withHeader("Content-Type", "application/json").withStatus(200).withBody("serviceA:test-path")));
    }

    @Test
    public void testRoute() {
        ResponseEntity<String> responseEntity = this.restTemplate.getForEntity("/test-path/test", String.class);
        assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);

        serviceA.verify(1, getRequestedFor(urlPathEqualTo("/test-path/test")));
    }
}
于 2016-07-26T21:12:20.213 に答える