WebTestClient

今回は、WebTestClientについて簡略に調べてみたいと思います。

WebTestClientとは

モックのリクエストとレスポンスに基づいて構築され、HTTP サーバーなしで WebFlux アプリケーションのテストをサポートします。クライアントは、実行中のサーバーでのエンドツーエンドテストにも使用できます。

サンプル

実際のコード

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=RANDOM_PORT)
public class SampleTests {

    @Autowired
    private WebTestClient client;

	@Test
	public void getProductById() {

		int productId = 1;

        client.get()
            .uri("/product/" + productId) // URI指定
            .accept(APPLICATION_JSON) // レスポンス形式指定
            .exchange() // 実行
            .expectStatus().isOk() // HTTP Status確認
            .expectHeader().contentType(APPLICATION_JSON)
            .expectBody()
            .jsonPath("$.productId").isEqualTo(productId);
	}
}
  • expectBody(Class<T>):単一のオブジェクトにデコードします。
  • expectBodyList(Class<T>): オブジェクトをデコードして List<T> に収集します。
  • expectBody():JSON コンテンツまたは空のボディの場合は byte[] にデコードします。

レスポンスコンテンツを無視する場合

client.get().uri("/persons/123")
        .exchange()
        .expectStatus().isNotFound()
        .expectBody(Void.class);

JSON コンテンツ

ターゲット型なしで expectBody() を使用して、高レベルのオブジェクトを介してではなく、生のコンテンツに対してアサーションを実行できます。

client.get().uri("/persons/1")
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .json("{\"name\":\"Jane\"}")

結果を取得

EntityExchangeResult でテスト実行結果を取得することもできます。

EntityExchangeResult<Person> result = client.get().uri("/persons/1")
        .exchange()
        .expectStatus().isOk()
        .expectBody(Person.class)
        .returnResult();

終わりに

マイクロサービスを勉強していて、テストコードを作成するときに使用しましたので、簡単にメモしておきました。

詳しい情報はこちらを参考してください。

コメントを残す