Как вызвать API в фоновом потоке в Roboelectric в Android
Я провожу тест с Robolectric Runner. Тестируемый код проверяет, что он не выполняется в основном потоке:
if (Looper.getMainLooper().getThread() == java.lang.Thread.currentThread()) {
new IllegalStateException("Method called on the UI thread");
}
Тест Robolectric поднимает это исключение, и я не хочу этого. Я пытался запустить код из Robolectric.getBackgroundScheduler()
Но я все еще получаю исключение.
Как мой тест можно запустить в другом потоке?
1 ответ
Основная идея тестирования многопоточного кода - заставить его работать контролируемым образом в одном потоке.
Что бы я сделал:
- Переместить проверочный код в некоторый помощник класса
- Внедрить его и подделать под тест
Плюсы этого решения:
- Это решит вашу проблему
- Это устранит дублирование и приблизит вас к SRP (принцип ответственности одного класса)
Недостатки:
- Требуется правильное именование, так как оно скрывает функциональность метода
- Это даст вам дополнительную гибкость, которая вам может не понадобиться
Успех!