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()a を返します。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 に答える