Я хочу иметь Espresso
монитор Picasso
как IdlingResource
, так что я могу запустить ViewMatcher
s, как только изображение будет успешно загружено.Мониторинг Picasso для IdlingResource в Espresso
От навигации по исходному коду Picasso
я не понимаю, почему это не работает. Вот что я пробовал:
Picasso picasso = new Picasso.Builder(context).build();
Field dispatcherField = Picasso.class.getDeclaredField("dispatcher");
dispatcherField.setAccessible(true);
try {
Dispatcher dispatcher = (Dispatcher) dispatcherField.get(picasso);
Espresso.registerLooperAsIdlingResource(dispatcher.dispatcherThread.getLooper());
} catch (NoSuchFieldException e) {
throw new PicassoHasBeenRefactoredException();
} catch (Exception e) {
e.printStackTrace();
}
onView(withId(R.id.image_view)).check(matches(withImage(R.drawable.drawable)));
(да, я знаю, что отражает это неприглядное, но я не мог найти другой способ получить ручку на Looper
)
Но это приводит к ошибке при попытке чтобы получить Bitmap
от ImageView
:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
чтобы проверить, что тест работает, как ожидается, когда изображение было загружено, я попытался введения Thread.sleep(1000)
вместо этого IdlingResource
проверки ап d он прошел.
Можно ли предположить, что IdlingResource не был настроен правильно и, что более важно, что было бы правильным способом подождать, пока Пикассо завершит загрузку, прежде чем проверять виды с помощью Espresso?
вы не можете использовать [onSucess обратного вызова] (https://square.github.io/picasso/javadoc/com/squareup/picasso/Callback.html # onSuccess--) от Picasso для настройки вашего IdelingResource? –
@RahulTiwari Я не хочу изменять какой-либо производственный код для размещения тестов, если вы не имели в виду что-то еще? –
Я говорил об использовании обратных вызовов, которые Пикассо предоставляет 'onSuccess' и' onError' и, если возможно, избавляется от отражения. Так что да, я говорил о модификации кода, но это не повлияет на какую-либо функциональность. –