如果没有使用robolectric的某些方法找到阴影方法,我该怎么办?

时间:2012-10-01 13:59:35

标签: android testing shadow robolectric

我正在使用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)

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

1 个答案:

答案 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中。它是固定的。