2012-10-01 3 views
0

나는 안드로이드 코드를 테스트하기 위해 Robolectric을 사용하고 있으며, 그림자 메소드가없는 일부 메소드가 있기 때문에 실패한 테스트가 있다는 것을 알았습니다. 내 로직 코드에서robolectric을 사용하는 일부 메서드에서 그림자 메서드가없는 경우 어떻게해야합니까?

, 나는 다른 활동에서 비트 맵을 검색 :

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는이 ShadowBitmapDrawablenull 비트 맵을 포함입니다 발견했다. 따라서 drawable.getBitmap()은 예외를 발생시키는 null을 반환합니다. 내 테스트 코드가 실패

Robolectric.logMissingInvokedShadowMethods(); 

찾을 수 한 줄을 내가 원인을 생각 콘솔 :

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

내가 지금 무엇을 할 수

는 그럼 난 내 테스트 코드 로그인 가능? 섀도우 메서드를 추가하여 해결할 수 있으며이를 수행하는 방법은 무엇입니까?

답변

2

복제 GitHub의에서 소스 : https://github.com/pivotal/robolectric/

ShadowBitmapDrawable.java에 그림자 방법을 추가

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

그런 다음 컴파일하고 항아리에 포장. 고쳐졌습니다.

관련 문제