【问题标题】:Robolectric = Mockito : Cannot Create Mock or Spy In Mockito Because: dexcache == nullRobolectric = Mockito:无法在 Mockito 中创建 Mock 或 Spy 因为:dexcache == null
【发布时间】:2016-05-13 17:19:44
【问题描述】:

我在这里有一个很好的报告:

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 之后出现

【问题讨论】:

  • Robolectric + Mockito的可能重复
  • 我的问题不一样,解决方法也不一样。
  • 您的解决方案不同,因为 Mockito 在 1.9.5 之前不支持 dexmaker。如果你确保不使用 mockito-android,你可以使用任何你喜欢的版本。
  • @Jeff Bowman 是 mockito-android 您指的特定 SDK?我对此没有任何依赖
  • Robolectric 不需要 dexmaker。 Robolectric 与 jvm 普通 junit 测试一起使用,在构建机器上运行并且不需要 dexiing

标签: android unit-testing mockito robolectric robolectric-gradle-plugin


【解决方案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 一起工作的唯一方法。

【讨论】:

    【解决方案2】:

    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 或更低版本。
    猜你喜欢
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2023-01-18
    • 2023-03-20
    相关资源
    最近更新 更多