2016-09-13 20 views
2

質問はthis oneと似ています。 Androidプロジェクトの計測テストを実装しています。デリゲートメソッドが期待通りに呼び出されたかどうかをテストできるように、デリゲートを嘲笑して統合をテストしたい。Android計測器テストwith mockito

私のGradleファイル:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     applicationId "com.mytest" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 

     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

    repositories { 
     maven { url 'http://repo1.maven.org/maven2' } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.4.0'; 
    compile 'com.android.support:design:23.4.0'; 

    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'; 
    androidTestCompile 'com.google.dexmaker:dexmaker:1.2'; 
    androidTestCompile 'org.mockito:mockito-core:1.10.19' 
    androidTestCompile 'com.android.support:support-annotations:23.4.0'; 
    androidTestCompile 'com.android.support.test:runner:0.5'; 
    androidTestCompile 'com.android.support.test:rules:0.5'; 
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'; 
} 

私のテストファイル:

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { 

    MainActivity mainActivity; 

    @Mock 
    MyDelegate delegate; 

    public MainActivityTest() { 
     super(MainActivity.class); 
    } 

    @Before 
    public void setUp() throws Exception { 
     mainActivity = getActivity(); 
     MockitoAnnotations.initMocks(this); 
     mainActivity.setDelegate(delegate); 
    } 

    @Test 
    public void testDelegateMethod1() throws Exception { 
     mainActivity.doSomething(); 
     //delegate.method1 should be called 
    } 

} 

私はエラーを得た:

java.lang.NullPointerException 
at com.google.dexmaker.mockito.DexmakerMockMaker.getInvocationHandlerAdapter(DexmakerMockMaker.java:80) 
at com.google.dexmaker.mockito.DexmakerMockMaker.getHandler(DexmakerMockMaker.java:75) 
at org.mockito.internal.util.MockUtil.isMockitoMock(MockUtil.java:74) 
at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:66) 
at org.mockito.internal.configuration.injection.scanner.MockScanner.isMockOrSpy(MockScanner.java:86) 
at org.mockito.internal.configuration.injection.scanner.MockScanner.preparedMock(MockScanner.java:72) 
at org.mockito.internal.configuration.injection.scanner.MockScanner.scan(MockScanner.java:61) 
at org.mockito.internal.configuration.injection.scanner.MockScanner.addPreparedMocks(MockScanner.java:47) 
at org.mockito.internal.configuration.InjectingAnnotationEngine.injectMocks(InjectingAnnotationEngine.java:96) 
at org.mockito.internal.configuration.InjectingAnnotationEngine.processInjectMocks(InjectingAnnotationEngine.java:62) 
at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:56) 
at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:108) 

は、誰もがこの問題に助けてもらえますか?

答えて

0
@Captor 
private ArgumentCaptor<Callback> CallbackArgumentCaptor; 

そして、あなたの試験方法で使用すると、それは次の操作を行って、呼び出されたことを確認します:

verify(repository).retrieveSomething(callbackArgumentCaptor.capture()); 
callbackArgumentCaptor.getValue().successful(); 

または失敗を呼び出し、あなたがテストしているかに依存します。 は@Beforeにだけでなく、クラッシュの原因

@Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
    } 
+0

リピートをありがとう。しかし、MockitoAnnotations.initMocks(this);投稿したエラーが発生します – Steven

1

わからない理由

MockitoAnnotations.initMocks(this); 

これを追加することを忘れないでください、私の代わりに

System.setProperty("dexmaker.dexcache", InstrumentationRegistry.getTargetContext().getCacheDir().getPath()); 

を使用してで終わります。

関連する問題