单元测试、代码覆盖率

接着上一篇《spring-junit-jacoco代码覆盖测试》,本篇介绍一下如何gradle单元测试、代码覆盖率。

准备

  • gradle。请自行安装好gradle

使用maven转为gradle项目

在项目根目录下执行如下命令把maven项目转为gradle项目。

1
gradle init --type pom

命令执行完毕之后刷新项目可以看到项目目录下已经有gradle的配置build.gradlesettings.gradle等配置。

修改settings.gradle里面的项目名称,改为coverage-spring-gradle。如果不改为和项目同名字使用gradle编译的时候会报错。

1
2
3
4
5
6
7
8
9
org.eclipse.buildship.core.UnsupportedConfigurationException: Project at '/Users/ubuntuvim/codes/java_keeping/coverage-spring-gradle' can't be named 'coverage-spring-gradle33' because it's located directly under the workspace root. If such a project is renamed, Eclipse would move the container directory. To resolve this problem, move the project out of the workspace root or configure it to have the name 'coverage-spring-gradle'.
at org.eclipse.buildship.core.workspace.internal.DefaultWorkspaceOperations.validateProjectName(DefaultWorkspaceOperations.java:183)
at org.eclipse.buildship.core.workspace.internal.ProjectNameUpdater.checkProjectName(ProjectNameUpdater.java:107)
at org.eclipse.buildship.core.workspace.internal.ProjectNameUpdater.updateProjectName(ProjectNameUpdater.java:44)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeOpenWorkspaceProject(SynchronizeGradleBuildOperation.java:208)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeWorkspaceProject(SynchronizeGradleBuildOperation.java:186)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.synchronizeGradleProjectWithWorkspaceProject(SynchronizeGradleBuildOperation.java:176)
at org.eclipse.buildship.core.workspace.internal.SynchronizeGradleBuildOperation.access$000(SynchronizeGradleBuildOperation.java:99)
at org.eclip

删除maven依赖文件

使用gradle之后就不需要maven的文件了,删除master-lib,coverage.xml,compile.xml,jacocolib

项目右键 –> gradle –> refresh gradle project。之后项目结构如下图:

报告

运行生成单元测试报告

打开gradle视图

报告

可以看到gradle已经提供了很多任务,直接运行即可,我们不需要像使用Ant一样自己编写一大堆的脚本。

build任务

直接运行build -> build这个任务。稍等执行完毕之后,刷新项目,打开项目目录下build目录,展开之后可以看到一个index.html。这个文件就是单元测试报告。

build任务

生成一个单元测试报告就是这么简单,什么脚本都不需要写了,gradle已经帮你做好。

生成覆盖率报告

要构建一个覆盖率报告也是非常简单的。仍然是使用gradle提供好的插件,修改build.gradle,在文件中增加覆盖率插件。

增加覆盖率插件

首先引入jacoco插件。在build.gradle第三行增加:

1
apply plugin: 'jacoco'

在这个文件末尾增加如下配置:

1
2
3
4
5
6
7
8
9
10
11
// jacoco任务配置
jacoco {
// 设置覆盖率报告目录
reportsDir = file("$buildDir/coverage-report")
}
jacocoTestReport {
reports {
xml.enabled = true
html.enabled = true
}
}

生成覆盖率报告

进入项目根目录,直接如下命令即可生成覆盖率报告。

1
gradle clean test jacocoTestReport

执行过程需要下载一下依赖jar,稍等几分钟之后刷新项目,一步步展开build目录。

报告文件

打开index.html可以看到详细报告内容。

覆盖率报告

使用gradle是在简单很多,根本不需要你编写一大堆的脚本。非常爽。

项目源码

https://github.com/ubuntuvim/coverage/tree/coverage-spring-gradle