这里实际上有几个类似的问题,但我已经尝试了所有的建议,但仍然面临这个问题。
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
Java 1.8.0_191
最佳答案
可能你需要这样的东西
@BeforeClass
public static void setupClass() {
RxAndroidPlugins.setInitMainThreadSchedulerHandler(__ -> Schedulers.trampoline());
}
关于android - 无法运行 2 个连续的测试(需要但未调用实际上,与此模拟的交互为零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798783/