Robolectric = Mockito:无法在 Mockito 中创建 Mock 或 Spy,因为:dexcache == null
Robolectric = Mockito : Cannot Create Mock or Spy In Mockito Because: dexcache == null
我在这里报告了一个很好的问题:
Mockito + Dexmaker on Android
但是该解决方案不起作用。
我正在使用 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 后出现此问题
我刚找到这个解决方法:
https://comadeblog.wordpress.com/2013/11/12/dexcachenull-for-mockito-on-robolectric/comment-page-1/
长话短说:
使用compile 'org.mockito:mockito-core:1.9.0'
。更高版本会抛出这个错误。
这是我发现使用 Robolectric 的唯一方法。
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}"
我在这里报告了一个很好的问题:
Mockito + Dexmaker on Android
但是该解决方案不起作用。
我正在使用 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 后出现此问题
我刚找到这个解决方法:
https://comadeblog.wordpress.com/2013/11/12/dexcachenull-for-mockito-on-robolectric/comment-page-1/
长话短说:
使用compile 'org.mockito:mockito-core:1.9.0'
。更高版本会抛出这个错误。
这是我发现使用 Robolectric 的唯一方法。
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}"