Maven - пример тестирования мутации PITest

Изображение://wp-content/uploads/2018/11/pitest-logo.png[изображение]

В этой статье мы покажем вам, как использовать Maven PIT плагин для тестирования мутаций , чтобы сгенерировать отчет о тестировании мутаций для проекта Java.

Протестировано с

, Maven 3.5.3

, JUnit 5.3.1

, ПИТест 1.4.3

1. Quick - Плагин Maven PITest

1.1 Чтобы включить тестирование мутации PIT, поместите этот pitest-maven в` 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 Запустите PITest вручную.

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

1.3 Над файлом pom.xml прикреплена цель mutationCoverage к этапу тестирования Maven Теперь, когда мы запускаем тест Maven, он автоматически запускает тест PITest.

$ mvn clean test

1.4 Отчет будет сгенерирован в `target/pit-reports/YYYYMMDDHHMI/** `

2. Что такое мутационное тестирование

2.1 Тест на мутацию используется для измерения эффективности теста.

Тестирование мутаций будет использовать mutators (переключение математических операторов, изменение типа возврата, удаление вызова и т. Д.) Для изменения/изменения кода в различные мутации (создание нового кода на основе на мутаторах) и проверьте, не провалится ли модульный тест для новых мутаций (мутация уничтожена).

Эффективность тестов может быть мерой того, сколько мутаций убито.

2.2 Например, этот код:

    public boolean isPositive(int number) {

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

    }

По умолчанию PITest будет использовать разные mutators для преобразования приведенного выше кода в различные мутации (новый код):

Мутация # 1 - измененная условная граница (мутатор)

    public boolean isPositive(int number) {

        boolean result = false;
       //mutator - changed conditional boundary
        if (number > 0) {
            result = true;
        }
        return result;

    }

Мутация №2 - Отрицательный условный (мутатор)

    public boolean isPositive(int number) {

        boolean result = false;
       //mutator - negated conditional
        if (false) {
            result = true;
        }
        return result;

    }