0

我正在使用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 运行时,drawableShadowBitmapDrawable包含一个null位图。所以drawable.getBitmap()返回一个null导致异常的。

然后我启用了登录我的测试代码:

Robolectric.logMissingInvokedShadowMethods();

在控制台中发现一行我认为导致我的测试代码失败:

No Shadow method found for BitmapDrawable.<init>(android.content.res.Resources, android.graphics.Bitmap)

我现在能做什么?是否可以添加阴影方法来修复它以及如何做到这一点?

4

1 回答 1

2

从 github 克隆源代码:https ://github.com/pivotal/robolectric/

将阴影方法添加到ShadowBitmapDrawable.java

public void __constructor__(android.content.res.Resources res, Bitmap bitmap) {
    this.bitmap = bitmap;
}

然后编译它并打包到一个jar中。它是固定的。

于 2012-10-01T15:04:52.440 回答