如何在JUnit Test Execution期间添加Java系统属性

时间:2011-07-29 19:44:23

标签: gradle junit

我需要为我的JUnit测试定义一个系统属性。我已经尝试了各种步骤将名称/值对传递给gradle。 (我已经尝试过Milestone-3和4)。 这些方法都不起作用:

  • 在gradle.properties文件中定义systemProp.foo = bar
  • 在命令行传递-Dfoo = bar
  • 在命令行上传递-PsystemProp.foo = bar

我没有看到“gradle属性”中的其他属性,但我不确定是否应该这样做。但更重要的是,我将System.properties转储到静态初始化程序中,并且该属性不存在。我需要将System属性传递给正在运行的测试,以告诉他们运行的是什么环境(本地,Jenkins等)。

3 个答案:

答案 0 :(得分:10)

很抱歉回答我自己的问题。偶然发现了解决方案here

测试{ systemProperties = System.properties }

答案 1 :(得分:2)

您还可以定义以下各个属性:

test {
  systemProperty "file", "test.story"
}

(来自this answer

答案 2 :(得分:0)

在android上,您可以使用

android {
  ...
  testOptions {
    ...
    // Encapsulates options for local unit tests.
    unitTests {
      // By default, local unit tests throw an exception any time the code you are testing tries to access
      // Android platform APIs (unless you mock Android dependencies yourself or with a testing
      // framework like Mockito). However, you can enable the following property so that the test
      // returns either null or zero when accessing platform APIs, rather than throwing an exception.
      returnDefaultValues true

      // Encapsulates options for controlling how Gradle executes local unit tests. For a list
      // of all the options you can specify, read Gradle's reference documentation.
      all {
        // Sets JVM argument(s) for the test JVM(s).
        jvmArgs '-XX:MaxPermSize=256m'

        // You can also check the task name to apply options to only the tests you specify.
        if (it.name == 'testDebugUnitTest') {
          systemProperty 'debug', 'true'
        }
        ...
      }
    }
  }
}