今回は、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();
終わりに
マイクロサービスを勉強していて、テストコードを作成するときに使用しましたので、簡単にメモしておきました。
詳しい情報はこちらを参考してください。
