I.S*_*I.S 5 android kotlin kotlin-coroutines
我有这段代码我确实想测试loadSession(),正在testLoadSession()测试我用于单元测试的方法SuccessActivationCodeRepository,并且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)
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了 coroutinesTestRule.testDispatcher.runBlockingTest {} 和 advanceTimeBy(20000L) 并在 loadSession() 中设置了大于延迟时间的时间
@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)
}
}
}```
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3057 次 |
| 最近记录: |