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