web-dev-qa-db-fra.com

Comment passer l'entrée de la ligne de commande au programme de test Junit Maven

J'ai écrit un test junit pour ajouter deux nombres. J'ai besoin de transmettre ces chiffres à partir de la ligne de commande. J'exécute ce test junit à partir de l'outil maven comme

mvn -Dtest=AddNumbers

Mon programme de test ressemble à ceci

int num1 = 1;
int num2 = 2;

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

Comment passer ces numéros depuis la ligne de commande?

31
Achaius

Passer les nombres en tant que propriétés système comme suggéré par @artbristol est une bonne idée, mais j'ai trouvé qu'il n'est pas toujours garanti que ces propriétés seront propagées au test.

Pour être sûr de transmettre les propriétés du système au test, utilisez le paramètre maven surefire pluginargLine , comme

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

Pour passer l'entrée de la ligne de commande au programme de test junit maven, procédez comme suit. Par exemple, si vous devez passer le paramètre fileName dans le test unitaire exécuté par Maven, suivez les étapes suivantes:

  1. Dans le code JUnit - le paramètre sera transmis via les propriétés du système:

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        String fileName = System.getProperty("fileName");
        log.info("Reading config file : " + fileName);
    }
    
  2. Dans pom.xml - spécifiez le nom du paramètre dans la configuration du plugin surefire et utilisez la notation {fileName} pour forcer maven à obtenir la valeur réelle des propriétés du système

    <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. Dans la ligne de commande, passez le paramètre fileName aux propriétés du système JVM:

    mvn clean test -DfileName=my_file_name.txt
    
17
Vladimir Kroz

Vous pouvez les passer sur la ligne de commande comme ceci

mvn -Dtest=AddNumbers -Dnum1=100

puis accédez-y dans votre test avec

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

12
artbristol