Spring boot Kotlin+Mockito+弹簧靴

Spring boot Kotlin+Mockito+弹簧靴,spring-boot,kotlin,mockito,serenity-bdd,Spring Boot,Kotlin,Mockito,Serenity Bdd,我正在用Spring Boot学习Kotlin,我试图用Serenity做报告。 但是我对Mockito有一些问题,因为我不能模拟代码的最后一部分 这就是我的情况: @RestController @请求映射/个人 类个人控制器{ @自动连线 私有lateinit var personUseCase:personUseCase @GetMapping/all 有趣的findAllPeople:DataModelResponse{ 返回DataModelResponse PersonDataMod

我正在用Spring Boot学习Kotlin,我试图用Serenity做报告。 但是我对Mockito有一些问题,因为我不能模拟代码的最后一部分

这就是我的情况:

@RestController @请求映射/个人 类个人控制器{ @自动连线 私有lateinit var personUseCase:personUseCase @GetMapping/all 有趣的findAllPeople:DataModelResponse{ 返回DataModelResponse PersonDataModelResponseMapper.transformpersonUseCase.findAll } } @组成部分 类人格酶{ 芬德尔:名单{ val personImpl:Person=人格实现 返回personImpl.findAll } } 类Person实现:Person{ private val personDaoResponse:personDaoResponse=personDaoResponse 覆盖乐趣findAll:列表{ val listPeopleDao=personDaoResponse.findAll 返回PersonDaoMapper.transformlistPeopleDao } } 内部类persondao响应 val标识:长=0, val personName:字符串={ 芬德尔:名单{ José个人回应1的返回列表 } } 我试图在集成测试中模拟我的Dao:

@RunWithSerentityRunner::类 @WithTag集成 @AutoConfigureMockMvc @WebMvcTest 类PersonControllerTest{ @注射模拟 私有lateinit变量personController:personController @注射模拟 私有lateinit var personImplementation:personImplementation @间谍 私有lateinit var personUseCase:personUseCase @间谍 private val personDaoResponse=personDaoResponse @自动连线 私有lateinit var webApplicationContext:webApplicationContext @自动连线 私有lateinit var mockMvc:mockMvc @规则@JvmField var springMethodIntegration=SpringIntegrationMethodRule @以前 乐趣无限{ MockitoAnnotations.initMocksthis 重置Persondao响应 this.mockMvc=MockMvcBuilders.webAppContextSetupthis.webApplicationContext.build this.mockMvc=MockMvcBuilders.standaloneSetuppersonController.setMessageConvertersMappingJackson2HttpMessageConverter.build } @试验 有趣的“整合成功”{ Doreturnlist of persondao Response999L,Zé .`when`this.persondao response.findAll val结果=this.personController.findAllPeople assertNotNullresult assertEquals999L,结果。数据[0]。personId assertEqualsZé,结果。数据[0]。名称 } } 如果我尝试调用mock方法,我知道这个mock正在工作: assertEquals999L,this.personDaoResponse.findAll[0]。标识


如何在这样的集成测试中模拟此Dao?

不幸的是,我没有关于Mockito问题的答案,因为我已经离开Mockito很久了

如果Mockito不是必须的,我建议使用我的Spring Boot+Kotlin经验中的MockK。如果您还需要可注射的模拟bean,那么也可以添加SpringMock

由于您的PersonDaoResponse是在PersonImplementation类中构建的,您可以在MockK中使用类似的内容:

every { anyConstructed<PersonDaoResponse>().findAll() } returns listOf(PersonDaoResponse(999L, "Zé"))