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;博士:

使用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 回答