为了账号安全,请及时绑定邮箱和手机立即绑定

将 Java Mockito 测试转换为 Kotlin

将 Java Mockito 测试转换为 Kotlin

LEATH 2021-09-29 16:27:30
我在将以下工作Java测试转换为Kotlin@Testpublic 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 的转换结果是:@Testpublic 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.Answerorg.mockito.exceptions.misusing.UnfinishedStubingException:在此处检测到未完成的存根:-> 在 com.foobar.ParkIdGenerationServiceTest.testSomething(ParkIdGenerationServiceTest.kt:92)原意是修改传递给 的save方法的实体repository并返回。任何想法该怎么做?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信