我希望能够将Espresso
监视器Picasso
作为IdlingResource
,以便我可以在图像加载成功后运行ViewMatcher
。监测浓缩咖啡中IdlingResource的毕加索
从浏览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
一个手柄的另一种方式)
但是,试图当它导致这个错误从ImageView
得到Bitmap
:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
要检查预期一旦图像已加载测试运行,我想代替IdlingResource
检查的的引入Thread.sleep(1000)
它通过了。
可以肯定IdlingResource设置不正确,更重要的是,在检查Espresso视图之前等待Picasso完成加载的正确方法是什么?
不能使用[onSucess回调(https://square.github.io/picasso/javadoc/com/squareup/picasso/Callback.html #onSuccess--)从毕加索设置您的IdelingResource? –
@RahulTiwari我不想修改任何生产代码来适应测试,除非你的意思是别的吗? –
我在谈论使用回调毕加索提供'onSuccess'和'onError'并尽可能地去除反射。所以是的,我在谈论修改代码,但它不会影响任何功能。 –