Изображение://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; }