我写了一个junit测试来添加两个数字。我需要从命令行传递这个数字。我正在从maven工具运行这个junit测试
mvn -Dtest=AddNumbers
我的测试程序看起来像这样
int num1 = 1;
int num2 = 2;
@Test
public void addNos() {
System.out.println((num1 + num2));
}
如何从命令行传递这些数字?
答案 0 :(得分:35)
将数字作为@artbristol建议的系统属性传递是一个好主意,但我发现并不总能保证这些属性会传播到测试中。
要确保将系统属性传递给测试,请使用maven surefire plugin argLine参数,例如
mvn -Dtest=AddNumbers -DargLine="-Dnum1=1 -Dnum2=2"
答案 1 :(得分:16)
要将输入从命令行传递到junit maven测试程序,请按照以下步骤操作。例如,如果您需要将参数 fileName 传递给Maven执行的单元测试,请按照以下步骤操作:
在JUnit代码中 - 参数将通过系统属性传递:
@BeforeClass
public static void setUpBeforeClass() throws Exception {
String fileName = System.getProperty("fileName");
log.info("Reading config file : " + fileName);
}
在pom.xml中 - 在surefire插件配置中指定param名称,并使用{fileName}表示法强制maven从系统属性中获取实际值
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- since 2.5 -->
<systemPropertyVariables>
<fileName>${fileName}</fileName>
</systemPropertyVariables>
<!-- deprecated -->
<systemProperties>
<property>
<name>fileName</name>
<value>${fileName}</value>
</property>
</systemProperties>
</configuration>
</plugin>
在命令行中将fileName参数传递给JVM系统属性:
mvn clean test -DfileName=my_file_name.txt
答案 2 :(得分:12)
您可以在命令行上传递它们,就像这样
mvn -Dtest=AddNumbers -Dnum1=100
然后使用
在测试中访问它们 int num1=Integer.valueOf(System.getProperty("num1"));