我正在使用Robolectric来测试android代码,并发现有些测试失败了,因为有些方法没有阴影方法。
在我的逻辑代码中,我从另一个活动中检索了一个位图:
Bitmap bitmap = getBitmapFromResult(data);
BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
imageView.setImageDrawable(drawable);
稍后在另一种方法中,我从imageView
获取位图,并将其保存到文件中:
BitmapDrawable drawable = (BitmapDrawable)imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
// save to file
bitmap.compress(...);
但最后一行在测试时抛出NullPointerException。
我调试了代码,发现当使用robolectric运行测试代码时,drawable
是ShadowBitmapDrawable
包含null
位图。因此drawable.getBitmap()
会返回导致异常的null
。
然后我启用了测试代码的登录:
Robolectric.logMissingInvokedShadowMethods();
在控制台中找到一行,我认为导致我的测试代码失败:
No Shadow method found for BitmapDrawable.<init>(android.content.res.Resources, android.graphics.Bitmap)
我现在能做什么?是否可以添加阴影方法来修复它以及如何做到这一点?
答案 0 :(得分:2)
从github克隆源代码:https://github.com/pivotal/robolectric/
向ShadowBitmapDrawable.java
添加阴影方法:</ p>
public void __constructor__(android.content.res.Resources res, Bitmap bitmap) {
this.bitmap = bitmap;
}
然后编译并将其打包到jar中。它是固定的。