【发布时间】:2020-09-07 05:12:46
【问题描述】:
我正在用协程写一些测试用例
class ArticleViewModel : ViewModel() {
private var likeCount = 0
fun getLikeCount() = likeCount
fun addLikeCount() {
viewModelScope.launch {
likeCount += 1
likeCount
}
}
}
@ExperimentalCoroutinesApi
private fun MainCoroutineRule.runBlockingTest(block: suspend () -> Unit) =
this.testDispatcher.runBlockingTest {
block()
}
@ExperimentalCoroutinesApi
class MainCoroutineRule(
val testDispatcher: TestCoroutineDispatcher = TestCoroutineDispatcher()
) : TestWatcher() {
override fun starting(description: Description?) {
super.starting(description)
Dispatchers.setMain(testDispatcher)
}
override fun finished(description: Description?) {
super.finished(description)
Dispatchers.resetMain()
testDispatcher.cleanupTestCoroutines()
}
}
@ExperimentalCoroutinesApi
class ArticleViewModelTest {
@get:Rule
var mainCoroutineRule = MainCoroutineRule()
@Test
fun addLikeCount() = mainCoroutineRule.runBlockingTest {
val articleViewModel = ArticleViewModel()
articleViewModel.addLikeCount()
Assert.assertEquals(1, articleViewModel.getLikeCount())
}
}
上面的 addLikeCount() 测试用例工作正常,直到我尝试更改逻辑 addLikeCount()。
案例一:
fun addLikeCount() {
viewModelScope.launch {
delay(2000)
likeCount += 1
likeCount
}
}
案例2:
fun addLikeCount() {
viewModelScope.launch {
withTimeout(2000) {
likeCount += 1
likeCount
}
}
}
我想延迟 2 秒(例如:调用 API),然后继续处理逻辑(likeCount += 1, ....)。
情况1,addLikeCount()测试用例失败
情况2,addLikeCount()测试用例通过
我不知道为什么?延迟与 withTimeout 有什么区别? 如果您了解我的问题,请帮助我。非常感谢。
【问题讨论】:
标签: android testing kotlin-coroutines