1

ここでよく報告された問題があります:

Android の Mockito + Dexmaker

ただし、解決策は機能しません。

Robolectric を使用していますが、dexmaker のキャッシュの場所を設定しようとしても、次のようになります。

@Before
public void setUp()
{
    System.setProperty("dexmaker.dexcache", RuntimeEnvironment.application.getCacheDir().getPath());
}

エラーは次のように変わります

java.lang.RuntimeException: java.lang.NullPointerException

at com.android.dx.DexMaker.generateClassLoader(DexMaker.java:366)
at com.android.dx.DexMaker.generateAndLoad(DexMaker.java:439)
at com.android.dx.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:264)
at com.android.dx.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:56)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
at org.mockito.Mockito.spy(Mockito.java:1368)

Robolectric を使用して Mock または Spy オブジェクトを作成するためのアイデアはありますか?

注: Robolectric を使用せずに通常のオブジェクトを使用するActivityInstrumentationTestCase2と、 @RunWith(AndroidJUnit4.class)Mock オブジェクトと Spy オブジェクトを作成できます...

この問題は、Mockito 1.9 の後に発生しました。

4

2 に答える 2

1

この回避策を見つけました:

https://comadeblog.wordpress.com/2013/11/12/dexcachenull-for-mockito-on-robolectric/comment-page-1/

TL;DR:

を使用しcompile 'org.mockito:mockito-core:1.9.0'ます。より高いバージョンでは、このエラーがスローされます。

これは、Robolectric で動作させるために私が見つけた唯一の方法です。

于 2016-05-13T17:26:03.010 に答える
1

Robolectric は、ビルド マシン JVM で実行される単体テストに使用されます。これらのテストにはDexmakerは必要ありません。

だからあなたを修正してくださいbuild.gradle

androidTestCompile "com.crittercism.dexmaker:dexmaker:${versions.dexmaker}"
androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:${versions.dexmaker}"
androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:${versions.dexmaker}"
于 2016-05-14T13:24:43.253 に答える