Тестирование Android RxJava 2 - PullRequest
0 голосов
/ 17 декабря 2018

Ошибка при тестировании кода RxJava.Когда я звоню AndroidSchedulers.mainThread() во ViewModel, это происходитКто-нибудь знает, как с этим бороться?

Вот мой след стека:

java.lang.ExceptionInInitializerError
    ...
    at com.cardsimulator.ui.MainViewModel.executeCommand(MainViewModel.java:56)
    at com.cardsimulator.ui.MainViewModelTest.testExecuteCommand_NormalCommand(MainViewModelTest.java:54)
    ...
Caused by: java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.

1 Ответ

0 голосов
/ 17 декабря 2018

Не следует использовать AndroidSchedulers.mainThead() для целей тестирования.Вы можете использовать Schedulers.trampoline() вместо этого.Он в основном выполняет все задачи в текущем потоке без какой-либо очереди, а временные перегрузки также используют блокировку сна.

Вы можете использовать инъекционную среду (как Dagger 2) для введения правильного планировщика.Или просто вы можете добавить это в своем тесте:

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