不能 运行 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());
}
这里实际上有几个类似的问题,但我已经尝试了所有的建议,但仍然面临这个问题。
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());
}