Robolectric - 无法加载类: org.robolectric.shadows.ShadowMultiDex

4

我正在为一个使用multi dex的项目配置Robolectric。我使用的是Robolectric 3.0 RC3,应该支持Multidex而不会抛出“Multi dex installation failed”的异常。

testCompile('org.robolectric:robolectric:3.0-rc3')

我的样例测试位于src/test/java/SandwichTest:

@RunWith(RobolectricGradleTestRunner.class)
public class SandwichTest {
  @Test
  public void firstTest() { }
}

我有一个全局配置文件叫做robolectric.properties,用于在src/test/resources中加载ShadowMultiDex,根据Robolectric网站的说明。请注意,不要删除html标签。
shadows=org.robolectric.shadows.ShadowMultiDex

当我运行我的示例SandwichTest时,我遇到了此异常:
Could not load class: org.robolectric.shadows.ShadowMultiDex
java.lang.RuntimeException: Could not load class: org.robolectric.shadows.ShadowMultiDex
at org.robolectric.annotation.Config$Implementation.parseClass(Config.java:147)

看起来Robolectric已经找到了我的配置文件,但是无法加载ShadowMultiDex类。尝试手动将影子多DEX模块添加到我的gradle文件中:

 testCompile('org.robolectric:shadows-multidex:3.0-SNAPSHOT')

或者

 testCompile('org.robolectric:shadows-multidex')

同步过程中可能会出现“无法解析”的问题。

我错过了哪些步骤才能运行这个示例测试?


将那行代码添加到我的gradle文件中会在同步期间导致错误。为了共享整个build.gradle文件,我稍后会在一个简单的Hello World应用程序中重现这个问题。请耐心等待! - Mark
你没有给那个依赖项添加版本号。 - Jared Burrows
什么意思?我尝试了org.robolectric:shadows-multidex和org.robolectric:shadows-multidex:3.0-SNAPSHOT,但都不起作用。 - Mark
谢谢@JaredBurrows!现在它可以编译和运行了,但我遇到了一些人在这里看到的异常:https://github.com/robolectric/robolectric/issues/1520。我尝试在一个简单的HelloWorld应用程序中重现,但我无法做到这一点,所以我猜测我的应用程序代码正在做一些奇怪的事情。请随意将您的建议(使用版本3.0并删除shadows =)提交为答案。如果您愿意,我也可以将其提交为答案。干杯! - Mark
@JaredBurrows - 没问题!请继续! :) - Mark
显示剩余5条评论
1个回答

8

在您的问题中,我注意到您在Gradle依赖项中缺少一个version

您目前的代码:

testCompile('org.robolectric:shadows-multidex')

您需要:

testCompile('org.robolectric:shadows-multidex:3.0')

实际发布版本: https://oss.sonatype.org/content/repositories/releases/org/robolectric/shadows-multidex/

你应该删除以下内容:

shadows=org.robolectric.shadows.ShadowMultiDex

从您的 src/test/resources/robolectric.properties 文件中取得。它用于自定义阴影。


1
谢谢Jared!非常好用!干杯! - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接