KotlinでMockitoを使うとanyがうまくいかない
テストでMockitoを使っていると、any(Class<T>)
を使いたくなる場面は、そこそこ多いように思います。ところが、Kotlinでテストを書いていると、これを受け取ったKotlin実装のメソッドで以下のようなエラーが吐かれてしまい、テストが書けません。
java.lang.IllegalStateException: Mockito.any(Hoge::class.java) must not be null
調べてみると、近い内容でお困りのケースが見つかったので、これを参考に対応してみました。
要件
- Kotlin 1.2.21
- Mockito 1.10.19
対処法
一度Kotlin実装された別のメソッドでラップしてあげて、Kotlinで実装されたメソッドに、Null安全な状態で渡してあげれば良いようでした。以下のようにします。
@Test
fun test() {
val invokerMock = Mockito.mock(Invoker::class.java)
// 中略
Mockito.verify(invokerMock, Times(1)).invoke(any(Param::class.java))
}
private fun <T> any(clazz: Class<T>): T {
return Mockito.any(clazz)
}