私は、次の作業の変換の問題持っているJava
にテストをKotlin
@Test
public void testSomething() {
Mockito.when(parkIdMappingRepository.save(Mockito.any(ParkIdMapping.class))).thenAnswer(
(Answer<ParkIdMapping>) invocation -> {
ParkIdMapping mapping = invocation.getArgument(0);
mapping.setId(100L);
return mapping;
}
);
ParkIdMapping mapping = parkIdMappingRepository.save(new ParkIdMapping("123"));
assertEquals(new Long(100L), mapping.getId());
KotlinへのIntelliJアイデアによって行わ変換は、その結果:
@Test
public fun test_correctParkIdMappingGeneration() {
Mockito.`when`(parkIdMappingRepository.save(Mockito.any(ParkIdMapping::class.java))).thenAnswer(
{ invocation -> // compiler error
val mapping = invocation.getArgument(0)
mapping.id = 100L
mapping
} as Answer<ParkIdMapping>
)
val mapping = parkIdMappingRepository.save(ParkIdMapping("123"))
assertEquals(100L, mapping.id)
}
ラムダパラメータ「呼び出し」とのラインは、しかし、コンパイラエラーが発生します。
このパラメータの型を推論することはできません。明示的に指定してください。
私はこのようなラムダを調整しようとしました
Mockito.`when`(parkIdMappingRepository.save(Mockito.any(ParkIdMapping::class.java))).thenAnswer(
{ invocation: InvocationOnMock ->
val mapping = invocation.getArgument(0) as ParkIdMapping
mapping.id = 100L
mapping
} as Answer<ParkIdMapping>
)
その結果
java.lang.ClassCastExceptionが:com.foobar.ParkIdGenerationServiceTest $ test_correctParkIdMappingGeneration $ 1がorg.mockito.stubbing.Answerにキャストすることはできません
org.mockito.exceptions.misusing.UnfinishedStubbingException:未完のスタブは、ここで検出された: - >(ParkIdGenerationServiceTest.kt:92)com.foobar.ParkIdGenerationServiceTest.testSomethingで
本来の目的は、に渡されたエンティティ変更することであるsave
方法をrepository
、それを返します。何をすべきか任意のアイデア?
未チェックのキャストを移動Answer<ParkIdMapping>
するgetArgument
コール。
また、あなたはヘルパーモックメソッドを追加する必要があります。Mockito.any()
リターンはそれの検証機能でヌルとモックがあるためKotlinヌル・安全機能のNPEをスローします。
このような:
fun <T> any(): T {
Mockito.any<T>()
return uninitialized()
}
fun <T> uninitialized(): T = null as T
そして、テストは次のようになります。
@Test
public fun test_correctParkIdMappingGeneration() {
Mockito.`when`<ParkIdMapping>(parkIdMappingRepository.save(any())).thenAnswer(
{ invocation -> // compiler error
val mapping = invocation.getArgument<ParkIdMapping>(0)
mapping.id = 100L
mapping
}
)
val mapping = parkIdMappingRepository.save(ParkIdMapping("123"))
assertEquals(100L, mapping.id)
}
KotlinとMockito相互運用上の将来の読み:https://medium.com/@elye.project/befriending-kotlin-and-mockito-1c2e7b0ef791