gpt4 book ai didi

android - 为什么使用协程延迟()进行单元测试会失败?

转载 作者:行者123 更新时间:2023-12-05 01:14:57 26 4
gpt4 key购买 nike

我有这段代码我确实想测试 loadSession() 并且 testLoadSession() 是测试方法我有 SuccessActivationCodeRepository 用于单元test 和 observeForTesting 是扩展函数你可以看到我在单元测试中增加了更长的延迟,但它没有帮助它为 sessionData 返回 null,我该如何解决这个问题?

fun loadSession(activationCode: ActivationCode) {
viewModelScope.launch {
delay(START_DELAY)
when (val result = activationCodeRepository.fetchSession(activationCode)) {
is Response.Success<ISession> -> {
sessionMutableData.postValue(result.data)
}
is Response.Failure -> {
if (result.message == ERROR_RETRY_ACTIVATION) {
retryActivationMutableData.postValue(true)
} else {
errorMessageMutableData.postValue(ConsumableValue(result.message))
}
}
}
}
}


@Test
fun testLoadSession() {
viewModel.activationCodeRepository = SuccessActivationCodeRepository()
val activationCode = ActivationCode()
val expectedSession = Session("", "", "")
viewModel.loadSession(activationCode)
runBlocking {
delay(10000L)
}
viewModel.sessionData.observeForTesting {
assertThat(viewModel.sessionData.value?.sessionToken).isEqualTo(expectedSession.sessionToken)
}
}

class SuccessActivationCodeRepository : IActivationCodeRepository {
override suspend fun fetchSession(activationCode: ActivationCode): Response<ISession> {
return Response.Success(Session())
}
}

fun <T> LiveData<T>.observeForTesting(block: () -> Unit) {
val observer = Observer<T> { Unit }
try {
observeForever(observer)
block()
} finally {
removeObserver(observer)
}
}

最佳答案

我在 loadSession() 中添加了 coroutinesTestRule.testDispatcher.runBlockingTest {} 和 advanceTimeBy(20000L) 并设置时间大于延迟时间

 @Test
fun testLoadSession() {
viewModel.activationCodeRepository = SuccessActivationCodeRepository()
val activationCode = ActivationCode()
val expectedSession = Session()
coroutinesTestRule.testDispatcher.runBlockingTest {
viewModel.loadSession(activationCode)
viewModel.sessionData.observeForTesting {
advanceTimeBy(20000L)
assertThat(viewModel.sessionData.value.sessionToken).isEqualTo(expectedSession.sessionToken)
}
}
}```

关于android - 为什么使用协程延迟()进行单元测试会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com