2016-03-23 21 views
0

は、これは私のテストクラスである:Mockito.mockは()NPEで失敗:NoSuchMethodError:java.lang.System.logW

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, sdk=19) 
public class LoginPresenterTest { 

    LoginPresenter loginPresenter; 

    @Mock 
    private LoginView loginView; 

    @Mock 
    private LoginNetworkOperation loginNetworkOperation; 

    @Before 
    public void setUp() { 
     /** 
     * The following line is a fix for a popular Mockito problem 
     */ 
     System.setProperty("dexmaker.dexcache", RuntimeEnvironment.application.getCacheDir().getPath()); 
     MockitoAnnotations.initMocks(this); 
     loginPresenter = LoginPresenter_.getInstance_(RuntimeEnvironment.application); 
    } 

    // Some tests here, omitted 
} 

LoginViewはうまく嘲笑(それはインターフェースである)が、モックしようとしますLoginNetworkOperationは、このエラーがスローされます。

Caused by: java.lang.NoSuchMethodError: java.lang.System.logW(Ljava/lang/String;)V 
    at dalvik.system.DexPathList.makeDexElements(DexPathList.java:245) 
    at dalvik.system.DexPathList.__constructor__(DexPathList.java:112) 
    at dalvik.system.DexPathList.<init>(DexPathList.java) 
    at dalvik.system.BaseDexClassLoader.__constructor__(BaseDexClassLoader.java:48) 
    at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java) 
    at dalvik.system.DexClassLoader.<init>(DexClassLoader.java) 
    at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:382) 
    at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:258) 
    at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:55) 
    at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33) 
    at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59) 
    at org.mockito.Mockito.mock(Mockito.java:1285) 
    at org.mockito.Mockito.mock(Mockito.java:1163) 
    at com.example.android.ui.fragments.login.LoginPresenterTest.setUp(LoginPresenterTest.java:31) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:251) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) 
    ... 1 more 
+0

'@ Mock'と' mock() 'への明示的な呼び出しの両方が問題に関連しているのではないかと思います。 'setUp()'で 'mock()'の呼び出しをコメントアウトしようとしましたか? Dalvikは '@ Mock'を処理するときにテストランナーが提供するいくつかの設定情報を必要とするため、' mock() '呼び出しの1つが失敗する可能性があります。それでも問題が解決しない場合は、http://stackoverflow.com/questions/12267572/mockito-dexmaker-on-android?rq=1を見て、設定を微調整してみてください。そして/またはあなたのバージョンを変更してみてください。彼らが互換性がない場合に備えて、dexmaker。 –

+0

はい私は依存関係を二重に注入していることに気づき、a) '@Mock'アノテーションを' MockitoAnnotations.initMocks'と組み合わせて使用​​し、b)アノテーションなしで、 'loginView = Mockito.mock(LoginView。クラス); 'しかし、エラーは残っています。私はまた、別のバージョンのmockitoとdexmakerを使ってみましたが、役に立たなかった –

答えて

0

は私が私のGradleファイルで私のテスト・アーチファクトの間違った依存関係を持っていたが判明します。

私はこれだった:Iいいえ、私は私のbuild.gradleファイルからこれらの依存関係を削除したときにそのように、私はdexmakerが唯一のAndroid計装試験に使用されていることをどこかで読んで、私はユニットテストを実行していた

testCompile "com.crittercism.dexmaker:dexmaker:1.4" 
testCompile "com.crittercism.dexmaker:dexmaker-dx:1.4" 
testCompile "com.crittercism.dexmaker:dexmaker-mockito:1.4" 

を問題が長く経験されました