在本文中,我们将向您展示如何使用JaCoCo Maven插件生成Java项目的代码覆盖率报告。
经过测试
- Maven 3.5.3
- JUnit 5.3.1
- jacoco-maven-plugin 0.8.2
注意
JaCoCo是一个积极开发的行覆盖率工具,用于测量要测试的代码行数。
1. JaCoCo Maven插件
1.1在pom.xml
文件中声明以下JaCoCo插件。
pom.xml
org.jacoco
jacoco-maven-plugin
0.8.2
prepare-agent
report
test
report
它将在Maven测试阶段运行JaCoCo“报告”目标。
2.单元测试
2.1一个简单的Java代码返回一条消息,并检查一个空字符串。
MessageBuilder.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上等单元测试。
TestMessageBuilder.java
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 test
,将在target/site/jacoco/*
处生成JaCoCo代码覆盖率报告
Terminal
$ 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为红线再添加一个测试。
TestMessageBuilder.java
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(" "));
}
}
再次查看报告。
Terminal
$ mvn clean test
target/site/jacoco/index.html
3.2如果条件允许,再对黄线添加一项测试。
TestMessageBuilder.java
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));
}
}
再次查看报告。
Terminal
$ mvn clean test
target/site/jacoco/index.html
最后,所有线路均经过测试,覆盖率达到100%。
4.常见问题
4.1确保线路覆盖率必须至少达到90%。
pom.xml
org.jacoco
jacoco-maven-plugin
${jacoco.version}
prepare-agent
jacoco-report
test
report
jacoco-check
check
PACKAGE
LINE
COVEREDRATIO
0.9
jacoco:check
目标已附加到Maven验证阶段。
Terminal
$ 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
注意
更多JaCoCo检查示例:
4.2如何更新默认的JaCoCo输出文件夹?
pom.xml
org.jacoco
jacoco-maven-plugin
${jacoco.version}
prepare-agent
jacoco-report
test
report
target/jacoco-report
下载源代码
$ git clone https://github.com/mkyong/maven-examples.git
$ cd maven代码覆盖率$ mvn清洁测试
#在'target / site / jacoco / index.html'查看报告
参考文献
- Wikipedia:Java代码覆盖工具
- JaCoCo Java代码覆盖率库
- JaCoCo在Eclipse IDE中
标签: 代码覆盖率 jacoco maven
翻译自: https://mkyong.com/maven/maven-jacoco-code-coverage-example/