Как вызвать 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 ответ

Основная идея тестирования многопоточного кода - заставить его работать контролируемым образом в одном потоке.

Что бы я сделал:

  1. Переместить проверочный код в некоторый помощник класса
  2. Внедрить его и подделать под тест

Плюсы этого решения:

  1. Это решит вашу проблему
  2. Это устранит дублирование и приблизит вас к SRP (принцип ответственности одного класса)

Недостатки:

  1. Требуется правильное именование, так как оно скрывает функциональность метода
  2. Это даст вам дополнительную гибкость, которая вам может не понадобиться

Успех!

Другие вопросы по тегам