算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

【解決済み】KotlinでWebTestClientを使うと、ジェネリクスまわりでハマる

問題

WebTestClient.BodySpecisEqualToメソッドを呼び出すと、ぬるぽる。

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