【发布时间】:2019-08-14 14:41:13
【问题描述】:
我有这段代码我确实想测试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)
}
}
【问题讨论】:
标签: android kotlin kotlin-coroutines