2016-03-30 3 views
1

Я запускаю тест с Robolectric runner. Код испытуемый проверяет это не выполняется в главном потоке:Как называть api на фоне потока в Roboelectric в Android

if (Looper.getMainLooper().getThread() == java.lang.Thread.currentThread()) { 
    new IllegalStateException("Method called on the UI thread"); 
} 

тест Robolectric поднимает это исключение, и я не хочу этого. Я попытался запустить код из Robolectric.getBackgroundScheduler(), но я все еще получаю исключение.

Как мой тест может работать в другой теме?

ответ

0

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

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

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

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

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

Недостатки:

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

Успех!

 Смежные вопросы

  • Нет связанных вопросов^_^