【解決済み】KotlinでWebTestClientを使うと、ジェネリクスまわりでハマる
問題
WebTestClient.BodySpec
のisEqualTo
メソッドを呼び出すと、ぬるぽる。
webTestClient.get() .exchange() .expectBody(MyApiBody::class.java).isEqualTo<Nothing>(expectedBody)
isEqualTo
を呼び出すためには、その型引数としてNothing
を指定する必要がある(そうしないと、コンパイルが通らない)。
これを実行するとNullPointerException
が発生する。
解決方法
拡張関数のexpectBody
を使用する。
ただし、IDEはこの拡張関数をサジェストしてくれないので、自分でインポートする(サジェストさえしてくれていれば、あまり悩まずに済んだのに...)。
// これをインポート import org.springframework.test.web.reactive.server.expectBody
webTestClient.get()
.exchange()
.expectBody<MyApiBody>().isEqualTo(expectedBody)
コードの見た目もKotlinらしくスッキリし、テストもちゃんと実行される。
参考: [SPR-15692] Kotlin unable to inherit type for WebTestClient#BodySpec - Spring JIRA
あーまたKotlinのジェネリクスまわりのバグ踏んだっぽい...
— たろう (@ngsw_taro) August 20, 2018