【问题标题】:How to pass gradle systemProperties JUnit5 tests?如何通过 gradle 系统属性 JUnit 5 测试?
【发布时间】:2017-09-24 05:39:50
【问题描述】:

我正在使用gradle 3.5Unit 5 (jupiter)

我希望将系统属性传递给我的测试,以便配置测试

我正在使用此命令运行测试gradle test -Denv=envFile1

这是我的 gradle 文件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4' //JUnit 5
    }
}

repositories {
    mavenCentral()
}   

ext.versionJunitPlatform        = '1.0.0-M4'
ext.versionJunitJupiter         = '5.0.0-M4'
ext.versionLog4j                = '1.2.17'
ext.versionRestAssured          = '2.9.0'
ext.versionRestAssuredJsonValid = '3.0.2'
ext.versionHamcrest             = '1.3'
ext.versionJacksonDatabind      = '2.9.0.pr2'
ext.versionSeleniumJava         = '3.3.1' 

test {
    systemProperties System.properties
    systemProperty 'env1', System.properties['env']
    systemProperty 'env2', 'i am a static env'
}

dependencies {
    compile group: 'log4j'                      , name: 'log4j'                 , version: "$versionLog4j"               
    compile group: 'com.jayway.restassured'     , name: 'rest-assured'          , version: "$versionRestAssured"         
    compile group: 'io.rest-assured'            , name: 'json-schema-validator' , version: "$versionRestAssuredJsonValid"    
    compile group: 'org.hamcrest'               , name: 'hamcrest-all'          , version: "$versionHamcrest"     
    compile group: 'com.fasterxml.jackson.core' , name: 'jackson-databind'      , version: "$versionJacksonDatabind" 
    compile group: 'org.seleniumhq.selenium'    , name: 'selenium-java'         , version: "$versionSeleniumJava"    

    testCompile group: 'org.junit.jupiter' , name: 'junit-jupiter-api'     , version: "$versionJunitJupiter"
    testRuntime group: 'org.junit.jupiter' , name: 'junit-jupiter-engine'  , version: "$versionJunitJupiter"
}

这是我的测试:

package com.somecompany.someProject.tests;

import org.junit.jupiter.api.Test;

public class AaTest {
    @Test
    public void a() {
        System.out.println("a env: " + System.getProperty("env"));
        System.out.println("a env1: " + System.getProperty("env1"));
        System.out.println("a env2: " + System.getProperty("env2"));
    }
} 

这是我得到的输出:

gradle test -Denv=envName
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:junitPlatformTest
a env: null
a env1: null
a env2: null

*我已经更新了问题

【问题讨论】:

    标签: java testing gradle junit5 selenium-jupiter


    【解决方案1】:

    这是Setting system properties when using junitPlatform 的副本,我在这里回答:https://stackoverflow.com/a/41334739/388980

    您可以像这样设置系统属性:

    afterEvaluate {
        def junitPlatformTestTask = tasks.getByName('junitPlatformTest')
    
        junitPlatformTestTask.systemProperty 'org.slf4j.simpleLogger.defaultLogLevel', 'warn'
    }
    

    【讨论】:

    • 传递所有属性 afterEvaluate { def junitPlatformTestTask = tasks.getByName('junitPlatformTest') junitPlatformTestTask.systemProperties project.gradle.startParameter.systemPropertiesArgs }
    • 不错的提示,@Pashec
    【解决方案2】:

    对于以前版本的 junit,它可以使用以下代码:

    test {
       systemProperties System.properties
    }
    

    test {
       systemProperty 'env', System.properties['env']
    }
    

    当您在命令行中使用 -D 时,它会传递给 gradle 构建脚本而不是 JVM。

    不过貌似最新版不能用了,请看here

    junitPlatform 扩展/任务不支持 systemProperty at 这次。当 Gradle 团队增加对 JUnit 5 到核心 Gradle。

    【讨论】:

    • 已将我的问题更新为您的解决方案,但仍然无法正常工作!
    • @ShayTesler,我已经更新了我的答案。好像暂时不行。
    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多