2015-09-10 4 views
0

Я пытаюсь использовать новые AndroidJUnitRunner и JUnit4 для Android, и все мои тесты на эспрессо были легко конвертированы, но теперь мои тесты загрузчика не работают. Мои загрузчики требуют обработчика, для которого требуется UiThread, а интерфейс загрузчика не имеет возможности синхронно запрашивать его.Как протестировать CursorLoader с AndroidJUnitRunner и JUnit4?

@UiThreadTest 
@Test 
public void testContactLoader() { 
    ContactLoader loader = new ContactLoader(InstrumentationRegistry.getTargetContext()); 
    Cursor = getLoaderResultSynchronously(loader); // I don't know how to implement this function 
    // assert stuff 
} 

Кто-нибудь это сделал? Я увидел странную реализацию here, но я не уверен, как это работает.

ответ

0

У меня была аналогичная проблема с тестированием метода, который возвращал загрузчик курсора. Внутри этого метода он разбился на новый CursorLoader() с ошибкой «не может создать обработчик внутри потока, который не назвал looper.prepare()». В методе тестирования вызов Looper.prepare() перед вызовом моего метода, который вернул загрузчик курсора, решил проблему.

Изменить: чтобы Looper.prepare() вызывается только один раз, проверьте, не является ли оно первым. Если он равен нулю, он не был подготовлен. Я помещал это в настройку для каждого класса, который использует загрузчики курсора.

@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    if (Looper.myLooper() == null) { 
     Looper.prepare(); 
    } 
} 
+0

В итоге я просто пытался избавиться от погрузчиков, используя RxJava. Я увижу, работает ли Looper.prepare(). Я думал, что вы можете назвать это только один раз, или это вызовет исключение, поэтому я не думал, что это сработает. – Buttink

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