我有这个功能

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

10-07 19:47