猿问

将 Java Mockito 测试转换为 Kotlin

我在将以下工作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)

}

但是,带有 lambda 参数“调用”的行会导致编译器错误:


无法推断此参数的类型。请明确说明。


我试过像这样调整 lambda


    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.UnfinishedStubingException:在此处检测到未完成的存根:-> 在 com.foobar.ParkIdGenerationServiceTest.testSomething(ParkIdGenerationServiceTest.kt:92)


原意是修改传递给 的save方法的实体repository并返回。任何想法该怎么做?


LEATH
浏览 143回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答