单元测试Kotlin Flows和toList()

时间:2020-03-21 02:44:00

标签: kotlin-coroutines

我有这个单元测试:

@Test
    fun `should emit user repos on success`() = rule.dispatcher.runBlockingTest {
        // GIVEN
        val repo = Repo(name = "someRepo1", owner = RepoOwner(TEST_USERNAME), stars = 55)
        val channel = Channel<Repo>()
        val flow = channel.consumeAsFlow()

        doReturn(flow)
            .whenever(repository)
            .getUserRepos(TEST_USERNAME)

        // WHEN
        launch {
            channel.send(repo)
        }

        userDetailViewModel.lookupUserRepos(TEST_USERNAME)

        // THEN
        verify(userReposObserver).onChanged(listOf(repo))
    }

它将在视图模型中测试此代码:

@ExperimentalCoroutinesApi
    fun lookupUserRepos(login: String) {

        viewModelScope.launch {
            val flow = userRepository.getUserRepos(login)
            _userRepos.value = flow
                .catch { _isUserReposError.value = true }
                .toList()
        }
    }

调试显示流确实获得了repo,但是有关toList()的某些问题使测试失败(我得到测试失败Wanted but not invoked observer.onChanged...no interactions with this mock

非测试有效,但使用toList()中断进行测试。任何帮助表示赞赏。

0 个答案:

没有答案