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
'@ Mock'と' mock() 'への明示的な呼び出しの両方が問題に関連しているのではないかと思います。 'setUp()'で 'mock()'の呼び出しをコメントアウトしようとしましたか? Dalvikは '@ Mock'を処理するときにテストランナーが提供するいくつかの設定情報を必要とするため、' mock() '呼び出しの1つが失敗する可能性があります。それでも問題が解決しない場合は、http://stackoverflow.com/questions/12267572/mockito-dexmaker-on-android?rq=1を見て、設定を微調整してみてください。そして/またはあなたのバージョンを変更してみてください。彼らが互換性がない場合に備えて、dexmaker。 –
はい私は依存関係を二重に注入していることに気づき、a) '@Mock'アノテーションを' MockitoAnnotations.initMocks'と組み合わせて使用し、b)アノテーションなしで、 'loginView = Mockito.mock(LoginView。クラス); 'しかし、エラーは残っています。私はまた、別のバージョンのmockitoとdexmakerを使ってみましたが、役に立たなかった –