在运行gradlew test时,Android中的JVM选项。

25

我有一个项目,使用Robolectric进行单元测试。该项目使用Robolectric 3.0并需要在虚拟机选项中添加-ea-noverify选项。

在Android Studio中,我在“运行>编辑配置...”中创建了新的JUnit配置,然后将VM选项设置为-ea -noverify。通过这种方式,我成功地运行了我的单元测试。这是我的配置图像,请查看此处

然而,为了持续部署,我需要使用命令行运行单元测试。因此,我使用./gradlew test来运行单元测试。我还将org.gradle.jvmargs=-ea -noverify添加到gradle.properties文件中。不幸的是,它不起作用。我可以运行单元测试,但是我得到了java.lang.VerifyError错误,并且我认为gradle.properties没有被加载。

所以,我的问题是,如何让gradle.properties加载,或者您知道任何解决我的vm选项问题的方法吗?

3个回答

44

这个问题已经有了答案,但这可能是一种更简单的解决方案:

在你的应用程序模块的build.gradle文件中的android闭包中加入以下代码。

android {
  ....

  testOptions {
    unitTests.all {
      jvmArgs '-noverify'
    }
  }
}

3
这个更加简洁,是“gradle方式”。 - Korniltsev Anatoly
4
有人尝试在Android Studio 2.3上运行成功了吗?我仍然发现即使有这个步骤,测试仍会崩溃。 - David G
这在2.3.3上不起作用。被接受的答案非常好。 - Nicholas Ng
它对我有效。我有Android插件v. 3.0.1。 - Maksim Dmitriev
这绝对可以在插件3.0.1中使用。我记得在插件版本2.x中也有这个功能。 - tasomaniac
这个解决方案可行,但如果你想从Android Studio运行它们,仍然需要在测试配置中指定“-noverify”。 - OldCurmudgeon

9
我发现我们可以在应用程序的 build.gradle 中添加此块来解决这个问题。
tasks.whenTaskAdded { theTask ->
    def taskName = theTask.name.toString()
    if ("testDevDebug".toString().equals(taskName)) {
        theTask.jvmArgs('-ea', '-noverify')
    }
}

DevDebug是我的构建变体。


Gradle DSL 方法未找到:'jvmArgs()'。 - Adam Kis

0

也许这个

 ./gradlew -Dorg.gradle.jvmargs="-ea -noverify" test

我之前尝试过,但仍然遇到了java.lang.verifyError。 - Pi Vinci
我认为需要使用-P作为Gradle属性添加,而不是使用-D。据我所知,-D会将参数传递给JVM,而-P则会将其传递给Gradle。在这种情况下,您正在传递一个Gradle属性以再次将参数传递给JVM。 - Tim Kist

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