0

我们使用 JMockit 模拟框架对 Spring 应用程序单元进行了测试。现在我们想使用 MockK 在 Kotlin 中编写新的测试。几乎一切似乎都运行良好,但我们无法弄清楚如何模拟 Spring 自动装配的 bean。使用 JMockit,我们曾经使用 @Capturing 注释来扩展模拟,也用于实现模拟接口的类。如何在 MockK 框架中实现模拟的类似行为?

4

2 回答 2

2

将 oleksiyp 评论带入答案


目前,Mockk 没有这种行为。它对 Spring 的支持是有限的,但是使用 Spring 本身有一个解决方法:

您可以随心所欲地创建一个bean,即使在集成测试中也是如此。创建 bean 时,可以实例化一个 mock:

@Bean
fun bean(): BeanType = mockk()

然后,当这个 bean 被自动装配时,它将返回模拟实例,您将能够像往常一样使用 Mockk 的 DSL 设置它的行为。

于 2018-09-06T17:56:27.693 回答
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)
于 2019-01-24T04:26:03.620 回答