android - robolectric 的一些方法找不到影子方法怎么办?

标签 android testing shadow robolectric

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

相关文章:

ios - 墙上的 SceneKit 阴影

cocoa - NSButton 去除文本阴影

ios - 阻止 CALayer 阴影影响 subview ?

android - 为什么我的 Admob 奖励视频广告一次又一次加载失败?

node.js - 如何在 Adonis.js 中运行独特的测试

android - RemoteViews 只注册第一个 PendingIntent

testing - 即使第二次迭代失败,具有多次迭代的 TFS 自动化测试也显示为已通过

C++:如何为模板类创建小型速度测试?

android - 当应用程序在 android 中关闭时,是否可以将 Firebase 主题通知保存在 sqlite 中

android - 更改单个抽屉导航图标的图标颜色