【问题标题】:Jvm options in android when run gradlew test运行 gradlew 测试时 android 中的 Jvm 选项
【发布时间】:2015-08-31 16:40:35
【问题描述】:

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

在 Android Studio 中,我在 Run > Edit Configurations... 中创建了新的 JUnit 配置,然后将 VM Options 设置为 -ea -noverify。通过这种方式,我成功地运行了我的单元测试。这是关于我的配置的图片,查看Here

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

所以,我的问题是,如何让gradle.properties 加载,或者你知道有什么方法可以解决我的虚拟机选项问题吗?

【问题讨论】:

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


    【解决方案1】:

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

    在你的应用程序模块的build.gradle android 闭包文件中,添加这个。

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

    【讨论】:

    • 这个干净多了。 “毕业方式”
    • 有没有人有过使用 Android Studio 2.3 的经验?即使有了这个,我仍然看到测试崩溃。
    • 这不适用于 2.3.3。接受的答案效果很好
    • 它对我有用。我有 Android 插件 v. 3.0.1
    • 这绝对适用于插件 3.0.1。我记得插件版本 2.x 也有这个。
    【解决方案2】:

    我发现我们可以在app的build.gradle中加入这个block来解决这个问题

    tasks.whenTaskAdded { theTask ->
        def taskName = theTask.name.toString()
        if ("testDevDebug".toString().equals(taskName)) {
            theTask.jvmArgs('-ea', '-noverify')
        }
    }
    

    DevDebug 是我的构建变体。

    【讨论】:

    • 未找到 Gradle DSL 方法:'jvmArgs()'
    【解决方案3】:

    也许这个

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

    【讨论】:

    • 我之前确实尝试过,但仍然得到 java.lang.verifyError。
    • 我认为它需要 -P 来添加为 Gradle 属性,而不是 -D。据我了解,-D 将参数传递给 JVM,而 -P 将其传递给 Gradle。在这种情况下,您将传递一个 Gradle 属性以再次将参数传递给 JVM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多