如何在MockK中实现@Captureing类似行为?

时间:2018-09-01 21:09:03

标签: spring jmockit mockk

我们已经使用JMockit模拟框架对Spring应用程序单元进行了测试。现在,我们想使用MockK在Kotlin中编写新的测试。几乎所有东西似乎都可以正常工作,但是我们无法弄清楚如何模拟Spring自动装配的bean。使用JMockit时,我们曾经使用@Capturing注释,该注释还在实现了模拟接口的类上扩展了模拟。如何在MockK框架中实现模拟的类似行为?

2 个答案:

答案 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)