У меня проблема с преобразованием следующего рабочего 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());
Преобразование, выполненное Intellij Idea в Kotlin, приводит к:
@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)
}
Однако строка с лямбда-параметром 'invocation' вызывает ошибку компилятора:
Невозможно определить тип для этого параметра.Пожалуйста, укажите это явно.
Я пытался настроить лямбду следующим образом
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)
Первоначальное намерение состоит в том, чтобы изменить сущность, которая передается методу save
метода repository
, и вернуть его.Есть идеи что делать?