繁体   English   中英

KotlinTest 与 Mockk 的并行性

[英]KotlinTest parallelism with Mockk

所以我一直将 kotlintest 与 mockk 结合使用,但是在通过将其添加到 ProjectConfig 类从单线程模式切换到多线程模式时遇到了一个问题:

override fun parallelism(): Int = Runtime.getRuntime().availableProcessors()

如果我在单模式下运行。 我所有的测试都通过了,但就在我切换到并行性时,其中一些使用模拟的测试开始失败。

我有各种方法,例如:

override fun afterTest(testCase: TestCase, result: TestResult) {
    clearAllMocks()
}

所以我想像这样的方法可能会导致我的模拟失败,因为在验证块之前清除所有模拟数据。

有没有办法强制不同线程上的测试使用他们自己的 Mockk 实例并强制 clearAllMocks() 方法只清除调用线程上的模拟? 如果没有,还有哪些其他代码实践可以帮助解决这些问题?

根据mockk 存储库中的这个问题,与另一个测试框架相关, clearAllMocks不能并行运行。

如果您的测试并行执行,您将无法使用 clearAllMocks

oleksiyp 于 2019 年 5 月 15 日发表评论

这可能是由于mockk将事物保存在内存中的方式,而clearAllMocks无法正确(也许不应该)很好地处理竞争条件。

您可以做的是使用clearMocks单独清除每个实例模拟:

override fun afterTest(testCase: TestCase, result: TestResult) {
    clearMocks(mockedInstance1, mockedInstance2, mockedInstance3)
}

它应该在并行运行时工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM