В этой статье мы покажем вам, как использовать плагин JaCoCo Maven для создания отчета о покрытии кода для проекта Java.
Протестировано с
- Мавен 3.5.3
- Юнит 5.3.1
- jacoco-maven-плагин 0.8.2
1. Плагин JaCoCo Maven
1.1 Объявите следующий плагин JaCoCo в pom.xml
файл.
org.jacoco jacoco-maven-plugin 0.8.2 prepare-agent report test report
Он будет выполнять цель “отчета” JaCoCo на этапе тестирования Maven.
2. Модульный тест
2.1 Простой код Java для возврата сообщения и проверка пустой строки.
package com.mkyong.examples; public class MessageBuilder { public String getMessage(String name) { StringBuilder result = new StringBuilder(); if (name == null || name.trim().length() == 0) { result.append("Please provide a name!"); } else { result.append("Hello " + name); } return result.toString(); } }
2.2 Модульный тест выше класса.
package com.mkyong.examples; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class TestMessageBuilder { @Test public void testNameMkyong() { MessageBuilder obj = new MessageBuilder(); assertEquals("Hello mkyong", obj.getMessage("mkyong")); } }
2.3 Запустите mvn-тест
, отчет о покрытии кода JaCoCo будет сгенерирован на целевом/сайте/jacoco/*
$ mvn clean test [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.mkyong.examples.TestMessageBuilder [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 s - in com.mkyong.examples.TestMessageBuilder [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- jacoco-maven-plugin:0.8.2:report (report) @ maven-code-coverage --- [INFO] Loading execution data file D:\maven-examples\maven-code-coverage\target\jacoco.exec [INFO] Analyzed bundle 'maven-code-coverage' with 1 classes [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.164 s [INFO] Finished at: 2018-11-14T16:48:39+08:00 [INFO] ------------------------------------------------------------------------
2.4 Откройте target/site/jacoco/index.html
файл, просмотрите отчет о покрытии кода:
- Зеленый – код протестирован или покрыт.
- Красный код не тестируется и не покрывается.
- Желтый код частично протестирован или покрыт.
3. Улучшение модульного теста
3.1 Добавление еще одного теста для красной линии.
package com.mkyong.examples; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class TestMessageBuilder { @Test public void testNameMkyong() { MessageBuilder obj = new MessageBuilder(); assertEquals("Hello mkyong", obj.getMessage("mkyong")); } @Test public void testNameEmpty() { MessageBuilder obj = new MessageBuilder(); assertEquals("Please provide a name!", obj.getMessage(" ")); } }
Просмотрите отчет еще раз.
$ mvn clean test
цель/сайт/jacoco/цель/сайт/jacoco/
3.2 Добавьте еще один тест для желтой линии, если условие.
package com.mkyong.examples; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class TestMessageBuilder { @Test public void testNameMkyong() { MessageBuilder obj = new MessageBuilder(); assertEquals("Hello mkyong", obj.getMessage("mkyong")); } @Test public void testNameEmpty() { MessageBuilder obj = new MessageBuilder(); assertEquals("Please provide a name!", obj.getMessage(" ")); } @Test public void testNameNull() { MessageBuilder obj = new MessageBuilder(); assertEquals("Please provide a name!", obj.getMessage(null)); } }
Просмотрите отчет еще раз.
$ mvn clean test
цель/сайт/jacoco/цель/сайт/jacoco/
Наконец, все линии протестированы, покрытие 100 %.
4. Часто задаваемые вопросы
4.1 Убедитесь, что покрытие линий должно соответствовать минимальным 90 %.
org.jacoco jacoco-maven-plugin ${jacoco.version} prepare-agent jacoco-report test report jacoco-check check PACKAGE LINE COVEREDRATIO 0.9
Цель jacoco:проверка
прикреплена к фазе проверки Maven.
$ mvn clean verify [INFO] Analyzed bundle 'maven-code-coverage' with 1 classes [WARNING] Rule violated for package com.mkyong.examples: lines covered ratio is 0.8, but expected minimum is 0.9
4.2 Как обновить выходную папку JaCoCo по умолчанию?
org.jacoco jacoco-maven-plugin ${jacoco.version} prepare-agent jacoco-report test report target/jacoco-report
Скачать Исходный Код
$mvn чистый тест # просмотреть отчет по адресу’target/site/jacoco/index.html ‘
Рекомендации
Оригинал: “https://mkyong.com/maven/maven-jacoco-code-coverage-example/”