Robolectric =的Mockito:无法创建模拟或间谍因为的Mockito:dexcache == NULL
我这里有一个很好的报告问题:Robolectric =的Mockito:无法创建模拟或间谍因为的Mockito:dexcache == NULL
但是该解决方案不起作用。
我使用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创建模拟或间谍对象吗?
注:如果我不使用Robolectric和使用常规ActivityInstrumentationTestCase2
和@RunWith(AndroidJUnit4.class)
我可以创建模拟和间谍对象...
这个问题1.9的Mockito
后出现我刚刚发现这个解决办法:
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合作的唯一途径。
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 1.9或更少。 – Aggressor
[Robolectric +的Mockito]的可能的复制(http://stackoverflow.com/questions/35970899/robolectric-mockito) –
我的问题是不同的,解决的办法是不同。 – Aggressor
您的解决方案不同,因为Mockito在1.9.5之前不支持dexmaker。如果你确保你不使用mockito-android,你可以使用任何你喜欢的版本。 –