使用Mockk的KotlinTest并行性

因此,我一直在将kotlintest与嘲笑结合使用,但是在将单线程模式切换到多线程并将其添加到ProjectConfig类时遇到了一个问题:

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

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

我到处都有方法,

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

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

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

ujuj010203 回答:使用Mockk的KotlinTest并行性

根据this issue in mockk repository,它与另一个测试框架有关,clearAllMocks不能并行运行。

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

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

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

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

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

它可以在并行运行时工作

本文链接:https://www.f2er.com/2789382.html

大家都在问