Maven - PITest-Mutationstestbeispiel

image://wp-content/uploads/2018/11/pitest-logo.png

In diesem Artikel zeigen wir Ihnen, wie Sie ein Maven PIT-Mutationstest-Plugin verwenden, um einen Mutationstest-Abdeckungsbericht für ein Java-Projekt zu erstellen.

Getestet mit

  1. Maven 3.5.3

  2. JUnit 5.3.1

  3. PITest 1.4.3

1. Quick - Maven PITest Plugin

1.1 Um PIT-Mutationstests zu ermöglichen, setzen Sie diesen pitest-maven in` 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 Führen Sie den PITest manuell aus.

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

1.3 Über der `pom.xml'-Datei wurde das Ziel 'mutationCoverage' an die Testphase von Maven angehängt Wenn wir jetzt den Maven-Test ausführen, wird der PITest-Test automatisch ausgelöst.

$ mvn clean test

1.4 Der Bericht wird unter `target/pit-reports/JJJJMMTTHHMI/** ` erstellt

2. Was ist Mutationstest

2.1 Der Mutationstest wird verwendet, um die Wirksamkeit des Tests zu messen.

Der Mutationstest verwendet mutators (mathematische Operatoren wechseln, Rückgabetyp ändern, Aufruf entfernen usw.), um den Code in verschiedene Mutationen umzuwandeln/zu ändern (neuen Code erstellen) Mutatoren) und prüfen, ob der Komponententest für die neuen Mutationen fehlschlägt (Mutation wird beendet).

Die Wirksamkeit der Tests kann ein Maß dafür sein, wie viele Mutationen abgetötet werden.

2.2 Zum Beispiel dieser Code:

    public boolean isPositive(int number) {

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

    }

Standardmäßig verwendet PITest verschiedene mutators , um den obigen Code in verschiedene Mutationen (neuen Code) zu transformieren: