如何将命令行的输入传递给junit maven测试程序

时间:2012-03-28 06:16:14

标签: maven junit junit4

我写了一个junit测试来添加两个数字。我需要从命令行传递这个数字。我正在从maven工具运行这个junit测试

mvn -Dtest=AddNumbers

我的测试程序看起来像这样

int num1 = 1;
int num2 = 2;

@Test
public void addNos() {
  System.out.println((num1 + num2));
}

如何从命令行传递这些数字?

3 个答案:

答案 0 :(得分:35)

将数字作为@artbristol建议的系统属性传递是一个好主意,但我发现并不总能保证这些属性会传播到测试中。

要确保将系统属性传递给测试,请使用maven surefire plugin argLine参数,例如

mvn -Dtest=AddNumbers -DargLine="-Dnum1=1 -Dnum2=2"

答案 1 :(得分:16)

要将输入从命令行传递到junit maven测试程序,请按照以下步骤操作。例如,如果您需要将参数 fileName 传递给Maven执行的单元测试,请按照以下步骤操作:

  1. 在JUnit代码中 - 参数将通过系统属性传递:

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        String fileName = System.getProperty("fileName");
        log.info("Reading config file : " + fileName);
    }
    
  2. 在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>
    
  3. 在命令行中将fileName参数传递给JVM系统属性:

    mvn clean test -DfileName=my_file_name.txt
    

答案 2 :(得分:12)

您可以在命令行上传递它们,就像这样

mvn -Dtest=AddNumbers -Dnum1=100

然后使用

在测试中访问它们

int num1=Integer.valueOf(System.getProperty("num1"));