GRADLE: TestNg - 无法将 -D 参数传递给 java 代码
GRADLE: TestNg - unable to pass -D parameter to java code
我有一个使用 TestNg 用 Java 编写并使用 gradle 构建的测试框架。我想在命令行传递一个 'environment' 参数,它将在环境 class 中用于为特定环境定义域和服务器值。使用 Gradle 文档和关于此问题的几个论坛讨论,我仍然无法将参数作为系统 属性 传递给框架。我试图通过 'test' 任务和 'debug' 任务来完成此任务,但无济于事。任务中的 'println' 语句显示 gradle 正在获取 -Denv 参数,但我尝试将其添加到测试框架的系统属性失败。
执行结果为空引用,environmentName 设置为空。
谁能指出我的错误?
命令行
.\gradlew debug -Denv=production
build.gradle
test {
def environment = System.properties["env"]
println environment
systemProperties = System.getProperties()
systemProperties['env'] = environment
useTestNG()
}
task debug(type: Test) {
// def environment = System.properties["env"]
// println environment
// systemProperties = System.getProperties()
// systemProperties['env'] = environment
def groupsToInclude = []
def groupsToExclude = []
groupsToInclude.add('under_development')
useTestNG() {
groupsToInclude.each { String group -> includeGroups group }
groupsToExclude.each { String group -> excludeGroups group }
}
}
java class
import com.sun.javafx.runtime.SystemProperties;
public class Environment {
private static EnvironmentDefinition environment;
private Environment() {
}
public static EnvironmentDefinition getInstance() {
if (environment == null) {
String environmentName = SystemProperties.getProperty("env");
// environmentName = environmentName == null ? "production" : environmentName;
switch (environmentName) {
default:
Environment.environment = ProductionEnvironment.getInstance();
}
}
return environment;
}
}
更好的解决方案可能是在 .gradle/gradel.properties
文件中添加 属性,并将 属性 设置为适用于该机器的值。看看是否有效。例如,您可以在您的机器上将其设置为 DEV
,但在另一台机器上将其设置为 BUILD
。这样就不用每次都输入了。
请参阅有关 customizing build by environment 的问题。这种方法有利也有弊。
希望对您有所帮助。
一切正常,请查看 demo I prepared. Mind the fact that you cannot 将系统 属性 设置为空值 - 这也可能是个问题。
“这是系统,你这个笨蛋……不是系统属性!……
难道不是最简单的疏忽造成最多的麻烦吗?
在将 Opal 的解决方案与我的一起克隆后,并一次一步地将它们对齐后,我注意到在 java 代码中我引用的是 SystemProperties .getProperty(),而不是 System.getProperty().
我有一个使用 TestNg 用 Java 编写并使用 gradle 构建的测试框架。我想在命令行传递一个 'environment' 参数,它将在环境 class 中用于为特定环境定义域和服务器值。使用 Gradle 文档和关于此问题的几个论坛讨论,我仍然无法将参数作为系统 属性 传递给框架。我试图通过 'test' 任务和 'debug' 任务来完成此任务,但无济于事。任务中的 'println' 语句显示 gradle 正在获取 -Denv 参数,但我尝试将其添加到测试框架的系统属性失败。
执行结果为空引用,environmentName 设置为空。
谁能指出我的错误?
命令行
.\gradlew debug -Denv=production
build.gradle
test {
def environment = System.properties["env"]
println environment
systemProperties = System.getProperties()
systemProperties['env'] = environment
useTestNG()
}
task debug(type: Test) {
// def environment = System.properties["env"]
// println environment
// systemProperties = System.getProperties()
// systemProperties['env'] = environment
def groupsToInclude = []
def groupsToExclude = []
groupsToInclude.add('under_development')
useTestNG() {
groupsToInclude.each { String group -> includeGroups group }
groupsToExclude.each { String group -> excludeGroups group }
}
}
java class
import com.sun.javafx.runtime.SystemProperties;
public class Environment {
private static EnvironmentDefinition environment;
private Environment() {
}
public static EnvironmentDefinition getInstance() {
if (environment == null) {
String environmentName = SystemProperties.getProperty("env");
// environmentName = environmentName == null ? "production" : environmentName;
switch (environmentName) {
default:
Environment.environment = ProductionEnvironment.getInstance();
}
}
return environment;
}
}
更好的解决方案可能是在 .gradle/gradel.properties
文件中添加 属性,并将 属性 设置为适用于该机器的值。看看是否有效。例如,您可以在您的机器上将其设置为 DEV
,但在另一台机器上将其设置为 BUILD
。这样就不用每次都输入了。
请参阅有关 customizing build by environment 的问题。这种方法有利也有弊。
希望对您有所帮助。
一切正常,请查看 demo I prepared. Mind the fact that you cannot 将系统 属性 设置为空值 - 这也可能是个问题。
“这是系统,你这个笨蛋……不是系统属性!……
难道不是最简单的疏忽造成最多的麻烦吗?
在将 Opal 的解决方案与我的一起克隆后,并一次一步地将它们对齐后,我注意到在 java 代码中我引用的是 SystemProperties .getProperty(),而不是 System.getProperty().