我有这个功能
override fun trackEvent(trackingData: TrackingData) {
trackingData.eventsList()
}
我可以进行如下测试。
@Test
fun `My Test`() {
// When
myObject.trackEvent(myTrackingMock)
// Then
verify(myTrackingMock, times(1)).eventsList()
}
但是,如果我把它变成一个
override fun trackEvent(trackingData: TrackingData) {
GlobalScope.launch{
trackingData.eventsList()
}
}
我怎么能让我的测试继续运行? (即可以使
launch
同步?)
最佳答案
要接近答案,请尝试提出一个相关问题:“我将如何对具有
Thread { trackingData.eventsList() }
在里面?”
您唯一的希望是运行一个循环,在一段时间内反复检查预期条件,直到放弃并宣布测试失败。
当您写信时
GlobalScope.launch
,您放弃了对 Kotlin 结构化并发的兴趣,因此您将不得不求助于非结构化和非确定性的测试方法。另一方面,也许您实际上并不想使用
GlobalScope
,但只是不知道更好?在这种情况下,重写您的代码以使用您控制的范围。
关于unit-testing - 如何对具有协程 `GlobalScope.launch` 的函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57489674/