我正在使用 Robolectric测试android代码,发现有一些测试失败,因为有些方法没有影子方法。
在我的逻辑代码中,我从另一个 Activity 中检索了一个位图:
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)
我现在可以做什么?是否可以添加一个影子方法来修复它以及如何做到这一点?
最佳答案
从 github 克隆源代码:https://github.com/pivotal/robolectric/
向ShadowBitmapDrawable.java
添加阴影方法:</p>
public void __constructor__(android.content.res.Resources res, Bitmap bitmap) {
this.bitmap = bitmap;
}
然后编译并打包成jar。它是固定的。
关于android - robolectric 的一些方法找不到影子方法怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12674747/