Могу ли я создать другой поток в InstantTaskExecutorRule? - PullRequest
0 голосов
/ 26 ноября 2018

Я тестирую компоненты архитектуры, 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

...