我一直在阅读这篇文章来了解如何对包含延迟的协程进行单元测试并应用它,但我仍然不明白为什么在协程中调用 myDelayedMethod() 之前调用
verify
并因此验证失败。难道就没有办法在测试中同步执行代码吗?
伪代码:
class ClasUnderTest{
fun method1(){
GlobalScope.launch {
myDelayedMethod()
}
}
suspend fun myDelayedMethod(): String{
withContext(dispatchers.default()){
delay(X)
...
someClass.someMethod()
}
}
}
@Test
fun myTest()= coroutinesTestRule.testDispatcher.runBlockingTest {
val someClassMock = mock(SomeClass::class.java)
val myObject = ClasUnderTest(someClassMock)
method1()
verify(someClassMock).someMethod()
}
同步执行测试代码的一种方法是返回
Job
中的 method1
,如下所示:
fun method1(): Job {
return GlobalScope.launch {
myDelayedMethod()
}
}
然后将
method1()
替换为method1().join()
,让runBlockingTest
等待协程执行后再进行验证。