Невозможно запустить 2 последовательных теста (разыскивается, но не вызывается На самом деле, с этим макетом не было никаких взаимодействий) - PullRequest
0 голосов
/ 16 декабря 2018

На самом деле здесь есть пара подобных вопросов, но я попробовал все предложения и все еще сталкиваюсь с этой проблемой.

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

mockito 2.8.47

java 1.8.0_191

1 Ответ

0 голосов
/ 11 января 2019

Вероятно, вам нужно что-то вроде этого

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