不能 运行 2 个连续测试(需要但未调用实际上,与此模拟的交互为零)

Can't run 2 consecutive tests (Wanted but not invoked Actually, there were zero interactions with this mock)

这里实际上有几个类似的问题,但我已经尝试了所有的建议,但仍然面临这个问题。

Wanted but not invoked:
observer.onChanged(<Repo matcher>);
-> at xxx.RepoViewModelTest.testRepoList(RepoViewModelTest.kt:51)
Actually, there were zero interactions with this mock.

class RepoViewModelTest {
    @get:Rule var instantTaskExecutorRule = InstantTaskExecutorRule()
    @Mock private lateinit var observer: Observer<DataWrapper<List<Repo>>>
    @Mock private lateinit var repoRepository: RepoRepository
    private lateinit var repoViewModel: RepoViewModel

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        repoViewModel = RepoViewModel(RepoUseCase(repoRepository))
    }

    @Test
    fun testError() {
        `when`(repoRepository.getRepos("mine"))
            .thenReturn(Observable.error(Exception("No internet")))
        repoViewModel.observeRepos().observeForever(observer)
        repoViewModel.getRepos("mine")    
        verify(observer).onChanged(
            argThat(RepoMatcher(DataWrapper(Exception("No internet")))))
    }

    @Test
    fun testRepoList() {
        val listIn = listOf(Repo("Repo1"), Repo("Repo2"))
        `when`(repoRepository.getRepos("mine"))
            .thenReturn(Observable.just(listIn))
        repoViewModel.observeRepos().observeForever(observer)
        repoViewModel.getRepos("mine")
        val listOut = listOf(Repo("Repo1"), Repo("Repo2"))
        verify(observer)
            .onChanged(argThat(RepoMatcher(DataWrapper(listOut))))
    }
}

我可以 运行 每个单独测试都很好,但不是整个套件。 我试图在每次测试后重置模拟,为每个测试创建一个观察者,或者在每个测试中实例化每个模拟对象,没有骰子。

运行 在 Android Studio 3.2.1 中测试 app/xxx/test

模拟 2.8.47

java1.8.0_191

可能你需要这样的东西

@BeforeClass
public static void setupClass() {
    RxAndroidPlugins.setInitMainThreadSchedulerHandler(__ -> Schedulers.trampoline());
}