【问题标题】:What can I do if there is no shadow method found for some methods with robolectric?如果使用 robolectric 的某些方法没有找到阴影方法,我该怎么办?
【发布时间】:2012-10-01 13:59:35
【问题描述】:

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

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

【问题讨论】:

    标签: android testing shadow robolectric


    【解决方案1】:

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

    ShadowBitmapDrawable.java添加一个影子方法:

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

    然后编译它并打包到一个jar中。已经解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      相关资源
      最近更新 更多