我们已经使用JMockit模拟框架对Spring应用程序单元进行了测试。现在,我们想使用MockK在Kotlin中编写新的测试。几乎所有东西似乎都可以正常工作,但是我们无法弄清楚如何模拟Spring自动装配的bean。使用JMockit时,我们曾经使用@Capturing注释,该注释还在实现了模拟接口的类上扩展了模拟。如何在MockK框架中实现模拟的类似行为?
答案 0 :(得分:1)
将oleksiyp注释带入答案
当前,Mockk没有这种行为。它对Spring的支持是有限的,但是有一种使用Spring本身的解决方法:
即使在集成测试中,也可以根据需要创建bean
。创建bean时,您可以实例化一个模拟:
@Bean
fun bean(): BeanType = mockk()
然后,当该bean自动装配好后,它将返回模拟的实例,您将能够照常使用Mockk的DSL设置其行为。
答案 1 :(得分:0)
Spring文档建议您通过构造函数自动装配所有组件。如果遵循该约定,就不会有此问题。
具体来说,建议如下...
@RestController
class SomeRandomController(
@Autowired private val ARepository: aRepository,
@Autowired private val BRepository: bRepository,
@Autowired private val CRepository: cRepository
){ etc ...}
然后在您的测试中,您需要以下几行:
val aRepository = mockk<ARepository>(relaxed = true)
val bRepository = mockk<BRepository>(relaxed = true)
val cRepository = mockk<CRepository>(relaxed = true)
val controller = SomeRandomController(aRepository, bRepository, cRepository)