Я тестирую компоненты архитектуры, JUnit4 и Mockito.Для тестирования LiveData мне нужно иметь InstantTaskExecutorRule .
Правило тестирования JUnit, которое заменяет фонового исполнителя, используемого компонентами архитектуры, на другой, который выполняет каждую задачу синхронно.
@RunWith(JUnit4::class)
class MyTest {
@Rule
@JvmField
val rule = InstantTaskExecutorRule()
}
Из-за InstantTaskExecutorRule мне сложно правильно тестировать.Я хочу отложить ответ метода с заглушкой.
@Test
fun test() {
val underTest = UnderTest(mocked)
val liveData = ...
`when`(mocked.doSomething())
.thenAnswer {
print("a")
Thread.sleep(1000)
print("b")
return liveData
}
// I want call mocked.doSomething() 1 time,
// while underTest.doSomething() is called 3 times.
print("1")
underTest.doSomething()
print("2")
underTest.doSomething()
print("3")
underTest.doSomething()
verify(mocked).doSomething()
}
Результат: 1ab2ab3ab
Ожидаемое: 123ababab