文章目錄
  1. 1. 配置Jacoco Maven Plugin
    1. 1.1. 目的
    2. 1.2. JaCoCo Maven plugin
    3. 1.3. Test Report文件位置
  2. 2. Jacoco Report 说明
    1. 2.1. Branches(分支语句)
    2. 2.2. Lines
    3. 2.3. Cyclomatic Complexity(环路复杂度)
  3. 3. 参考文献

由于软件测试实验的需要所以配置了一下jacoco来查看测试代码覆盖率并学习了一下jacoco,记了一下笔记留给将来的自己。

配置Jacoco Maven Plugin

目的

我们用Jacoco的两个目的

  • 它使我们能够访问记录执行覆盖数据的JaCoCo runtime agent
  • 它能够生成代码覆盖率报告通过JaCoCo runtime agent

JaCoCo Maven plugin

我们可以在pox.xml中引入JaCoCo Maven plugin插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Sonar -->
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<!-- The destination file for the code coverage report has to be set to the same value
in the parent pom and in each module pom. Then JaCoCo will add up information in
the same report, so that, it will give the cross-module code coverage. -->
<sonar.jacoco.itReportPath>${project.basedir}/target/jacoco.exec</sonar.jacoco.itReportPath>
<sonar.language>java</sonar.language>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.5.3.201107060350</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<includes>com.*</includes>
</configuration>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>

Test Report文件位置

Jacoco Report 说明

Branches(分支语句)

JaCoCo将会计算所有的ifswitch分支语句的覆盖率。它将会计算出这个分支所有执行或者错过的总数。

在具体的分支语句处JaCoCo用钻石给我们标出

  • No coverage: 该行中没有分支已经执行红钻石
  • Partical coverage: 改行仅有部分分支已经被执行黄钻石
  • Full coverage: 改行中所有分支都已经被执行绿钻石

Lines

JaCoCo可以计算每一行的被覆盖的情况。JaCoCo认这一行至少有一条指令被执行则认为这一行别执行过了。

  • No coverage: 这一行没有执行过 红色背景
  • Partical: 这一行仅有部分指令被执行黄色背景
  • Full coverage: 这一行所有的指令都被执行了绿色背景

Cyclomatic Complexity(环路复杂度)

对于环路复杂度具体用处将不再解释
JaCoCo会计算出每个非抽象方法的环路复杂度,和类,包的总的环路复杂度。
comlexity非常重要。因为它指出这些单元测试将会覆盖软件的具体的一部分

环路复杂度的定义是将一个方法的控制流图转化为有向图:

v(G) = E - N + 2

E是边数,N是节点数. JaCoCo用如下的等效方程计算环路复杂度,其中B是此方法中的所有分支数,D是所有的decision points:

v(G) = B - D + 1

参考文献

Jacoco覆盖率工具使用之maven篇
Coverage Counters
Creating Code Coverage Reports for Unit and Integration Tests With the JaCoCo Maven Plugin
Unit Test Code Coverage With Maven And Jacoco
如何用maven运行特定的test case

文章目錄
  1. 1. 配置Jacoco Maven Plugin
    1. 1.1. 目的
    2. 1.2. JaCoCo Maven plugin
    3. 1.3. Test Report文件位置
  2. 2. Jacoco Report 说明
    1. 2.1. Branches(分支语句)
    2. 2.2. Lines
    3. 2.3. Cyclomatic Complexity(环路复杂度)
  3. 3. 参考文献