使用带延迟的协程验证在单元测试中调用的方法

问题描述 投票:0回答:1

我一直在阅读这篇文章来了解如何对包含延迟的协程进行单元测试并应用它,但我仍然不明白为什么在协程中调用 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()
}
android unit-testing delay kotlin-coroutines
1个回答
3
投票

同步执行测试代码的一种方法是返回

Job
中的
method1
,如下所示:

fun method1(): Job {
  return GlobalScope.launch {
    myDelayedMethod()
  }
}

然后将

method1()
替换为
method1().join()
,让
runBlockingTest
等待协程执行后再进行验证。

© www.soinside.com 2019 - 2024. All rights reserved.