Maven - Exemple de test de mutation de PITest

image

Dans cet article, nous allons vous montrer comment utiliser un Maven plug-in de test de mutation pour générer un rapport de couverture de test de mutation pour un projet Java.

Testé avec

  1. Maven 3.5.3

  2. JUnit 5.3.1

  3. PITest 1.4.3

1. Quick - Plugin Maven PITest

1.1 Pour activer le test de mutation PIT, placez ce pitest-maven dans` pom.xml`

pom.xml

    <plugin>
        <groupId>org.pitest</groupId>
        <artifactId>pitest-maven</artifactId>
        <version>1.4.3</version>

        <executions>
            <execution>
                <id>pit-report</id>
                <!-- optional, this example attached the goal into mvn test phase -->
                <phase>test</phase>
                <goals>
                    <goal>mutationCoverage</goal>
                </goals>
            </execution>
        </executions>

        <!-- https://github.com/hcoles/pitest/issues/284 -->
        <!-- Need this to support JUnit 5 -->
        <dependencies>
            <dependency>
                <groupId>org.pitest</groupId>
                <artifactId>pitest-junit5-plugin</artifactId>
                <version>0.8</version>
            </dependency>
        </dependencies>
        <configuration>
            <targetClasses>
                <param>com.mkyong.examples.** </param>
            </targetClasses>
            <targetTests>
                <param>com.mkyong.examples.** </param>
            </targetTests>
        </configuration>
    </plugin>

1.2 Exécutez le test PITest manuellement.

$ mvn clean org.pitest:pitest-maven:mutationCoverage

1.3 Au-dessus du fichier pom.xml , attaché l’objectif 'mutationCoverage' à la phase de test Maven. Désormais, lorsque nous exécutons le test Maven, le test PITest sera automatiquement déclenché.

$ mvn clean test

1.4 Le rapport sera généré dans `target/pit-reports/YYYYMMDDHHMI/** `

2. Qu’est-ce que le test de mutation?

2.1 Le test de mutation est utilisé pour mesurer l’efficacité du test.

Le test de mutation utilisera mutators (changement d’opérateur mathématique, changement de type de retour, suppression d’appel, etc.) pour effectuer une mutation/modification du code en différentes mutations mutateurs) et vérifiez si le test unitaire échouera pour les nouvelles mutations (la mutation est tuée).

L’efficacité des tests peut être une mesure du nombre de mutations tuées.

2.2 Par exemple, ce code:

    public boolean isPositive(int number) {

        boolean result = false;
        if (number >= 0) {
            result = true;
        }
        return result;

    }

Par défaut, PITest utilisera mutators pour transformer le code ci-dessus en différentes mutations (nouveau code):