Gradle进阶:3:结合Jacoco进行覆盖率确认

版权声明:本文为博主原创文章,未经博主允许欢迎转载,但请注明出处。 https://blog.csdn.net/liumiaocn/article/details/84230462

在这里插入图片描述
上篇文章我们了解到了如何使用Gradle结合Junit对创建的SpringBoot的应用进行单体测试,这篇文章来接着确认一些如何可视化地确认测试覆盖率。

前提

Jacoco是Java Code Coverage Library的缩写,它是用于确认java应用单体测试覆盖率的有效工具,最重要的一个前提是需要有测试用例,所以本文是在前面一篇文章的基础之上的,关于如何使用gradle进行spring boot的单体测试这里不再赘述。

Gradle方式使用Jacoco

build.gradle添加

  • 添加Jacoco的plugin

apply plugin: ‘jacoco’

  • 添加使用设定
    后面会给出同样方式使用maven和jacoco的方法,从直观的感受来说gradle写的更加人性化一些,从如下可以读出,jacoco的相关结果的报告是以html方式生成。当然根据需要还可以加上check.dependsOn jacocoTestReport的依赖,这样使用gradle build可以直接生成结果,较为方便。

jacocoTestReport {
reports {
xml.enabled false
html.enabled true
}
}

  • build.gradle
    添加了上述内容的build.gradle为:
liumiaocn:springboot liumiao$ cat build.gradle 
buildscript {
	ext {
		springBootVersion = '2.1.1.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.liumiaocn'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	mavenCentral()
}


dependencies {
	implementation('org.springframework.boot:spring-boot-starter-web')
        testImplementation('org.springframework.boot:spring-boot-starter-test')
}

jacocoTestReport {
    reports {
        xml.enabled false
        html.enabled true
    }
}

check.dependsOn jacocoTestReport
liumiaocn:springboot liumiao$ 

执行命令

有多种方式可以生成jacoco的reports,这里由于依赖已经创建,可以直接使用gradle build即可,当然也可以按照顺序执行jacocoTestReport。

执行命令:gradle build

  • 执行日志
liumiaocn:springboot liumiao$ gradle clean;

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
liumiaocn:springboot liumiao$ gradle build

> Task :test
2018-12-13 06:42:10.567  INFO 52478 --- [       Thread-6] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

BUILD SUCCESSFUL in 5s
6 actionable tasks: 6 executed
liumiaocn:springboot liumiao$

结果确认

上述gradle build执行的时候实际是执行了jacoco插件的jacocoTestReport任务,其生成的方式应该是html的,位置位于build/reports/jacoco:

liumiaocn:springboot liumiao$ tree build
build
├── classes
│   └── java
│       ├── main
│       │   └── com
│       │       └── liumiaocn
│       │           └── springbootdemo
│       │               └── SpringbootdemoApplication.class
│       └── test
│           └── com
│               └── liumiaocn
│                   └── springbootdemo
│                       └── SpringbootdemoApplicationTests.class
├── jacoco
│   └── test.exec
├── libs
│   └── springbootdemo-0.0.1-SNAPSHOT.jar
├── reports
│   ├── jacoco
│   │   └── test
│   │       └── html
│   │           ├── com.liumiaocn.springbootdemo
│   │           │   ├── SpringbootdemoApplication.html
│   │           │   ├── SpringbootdemoApplication.java.html
│   │           │   ├── index.html
│   │           │   └── index.source.html
│   │           ├── index.html
│   │           ├── jacoco-resources
│   │           │   ├── branchfc.gif
│   │           │   ├── branchnc.gif
│   │           │   ├── branchpc.gif
│   │           │   ├── bundle.gif
│   │           │   ├── class.gif
│   │           │   ├── down.gif
│   │           │   ├── greenbar.gif
│   │           │   ├── group.gif
│   │           │   ├── method.gif
│   │           │   ├── package.gif
│   │           │   ├── prettify.css
│   │           │   ├── prettify.js
│   │           │   ├── redbar.gif
│   │           │   ├── report.css
│   │           │   ├── report.gif
│   │           │   ├── session.gif
│   │           │   ├── sort.gif
│   │           │   ├── sort.js
│   │           │   ├── source.gif
│   │           │   └── up.gif
│   │           └── jacoco-sessions.html
│   └── tests
│       └── test
│           ├── classes
│           │   └── com.liumiaocn.springbootdemo.SpringbootdemoApplicationTests.html
│           ├── css
│           │   ├── base-style.css
│           │   └── style.css
│           ├── index.html
│           ├── js
│           │   └── report.js
│           └── packages
│               └── com.liumiaocn.springbootdemo.html
├── resources
│   └── main
│       └── application.properties
├── test-results
│   └── test
│       ├── TEST-com.liumiaocn.springbootdemo.SpringbootdemoApplicationTests.xml
│       └── binary
│           ├── output.bin
│           ├── output.bin.idx
│           └── results.bin
└── tmp
    ├── bootJar
    │   └── MANIFEST.MF
    ├── compileJava
    ├── compileTestJava
    └── expandedArchives
        └── org.jacoco.agent-0.8.1.jar_8059ed6e1ab8b88aac5d9097fad847bb
            ├── META-INF
            │   ├── MANIFEST.MF
            │   └── maven
            │       └── org.jacoco
            │           └── org.jacoco.agent
            │               ├── pom.properties
            │               └── pom.xml
            ├── about.html
            ├── jacocoagent.jar
            └── org
                └── jacoco
                    └── agent
                        └── AgentJar.class

42 directories, 48 files
liumiaocn:springboot liumiao$

Jacoco的报告目录中也有一个index.html,通过它也可以一目了然地看到覆盖率的可视化的结果。

  • 应用的整体覆盖率状况summary
    在这里插入图片描述
  • package单位的覆盖率状况summary
    在这里插入图片描述
  • class单位的覆盖率状况summary
    在这里插入图片描述
  • 代码行粒度的覆盖率确认详细
    在这里插入图片描述

Maven方式使用Jacoco

同样是使用plugin方式,maven使用gradle的方法总结如下,可以与gradle进行一下简单的对比

Pom添加

	<profiles>
		<profile>
			<id>sonar-jacoco-coverage</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<build>
				<pluginManagement>
					<plugins>
						<plugin>
							<groupId>org.jacoco</groupId>
							<artifactId>jacoco-maven-plugin</artifactId>
							<version>0.7.8</version>
						</plugin>
					</plugins>
				</pluginManagement>
				<plugins>
					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<configuration>
							<append>true</append>
						</configuration>
						<executions>
							<execution>
								<id>jacoco-ut</id>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
							</execution>
							<execution>
								<id>jacoco-it</id>
								<goals>
									<goal>prepare-agent-integration</goal>
								</goals>
							</execution>
							<execution>
								<id>jacoco-site</id>
								<phase>verify</phase>
								<goals>
									<goal>report</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

执行命令

执行如下命令则可完成单体测试以及结合sonar对jacoco生成出来的内容进行分析与显示,会下载jacoco-maven-plugin进行实际的操作。

mvn test

详细可以参看maven+junit+spring boot+jacoco+sonarqube的简单示例,因为maven和gradle同属同类,所以使用的demo测试代码这里也尽量相同,以利于比较。

总结

这篇文章介绍了gradle中结合jacoco对spring boot的单体测试结果进行可视化展示,同时比较了maven的使用方式,后续进一步介绍如何与sonarqube进行集成。

参考内容

https://www.eclemma.org/jacoco/trunk/index.html

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/84230462