我有这个功能
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
,但是只是不知道更好呢?在这种情况下,请重写代码以使用您所控制的范围。