前面的文章里我们介绍了代码覆盖率的概念以及Jacoco整体介绍和工具原理。接下来我们来演示一下使用情况。大家去它的官网上就可以下载一个官网的一个源码包。然后把下载的Jacoco源码包进行解压,解压出来以后,我们会进入到一个叫做doc的一个文件夹里,有一个example文件夹。
进去之后,有一个build文件夹,这是一个项目,是官方给我们举的一个例子。这个例子是很简单的几个java代码文件,然后给你写了一段单元测试,让你通过运行单元测试的方式去运行这个项目。
比如说你的项目里有两个文件,一个是src文件,还有一个文件是测试用例,我们称之为test文件。这个src需要先编译成.class,然后进行打包编译。由java文件编译成一个.class文件,再编译成可执行的文件去执行。
假如说我们的项目是Maven执行起来的,我们的项目执行起来之后,我们运行单元测试的脚本,运行单元测试的脚本就肯定会访问到业务代码,这个时候jacoco在同步统计。因为这个项目里面集成了Jacoco,统计后会生成一个中间文件,然后最后讲这个中间文件生成报告。
项目打包编译完成了,单元测试也运行完成了,单元测试运行到底测到了哪些代码也被统计出来了,在项目指定的一个路径里面。接下来我们就一起演示一下。
我们可以看到这个build文件夹里有好几个文件,我们都知道build.xml是Ant的构建文件,pom.xml是Maven的构建文件,我们先来跑Ant的构建文件。
打开一个cmd的窗口命令,进入到这个项目里。执行Ant,我们就不执行Ant build了,大家都知道,我们在执行Ant的时候,它会去找当前路径下的build.xml的文件。
这个build.xml文件里写的是对整个Java工程进行代码的编译,代码的打包执行,统计代码覆盖率,并且出局一个Jacoco的报告。它都写在这里面了,你自己也可以把你的项目里面也加上Jacoco的代码统计,学着官方的build文件自己写一个,完全是可以运行的,我们跑一下试一试。
我们可以看到,先进行了clean,又进行了compile编译,又进行了单元测试,里面是它打印出的一些逻辑,很简单的一些单元测试的用例,一些加减乘除的计算,然后根据jacoco的执行文件出报告。
最后我们看到build也成功了,报告也出来了,接下来咱们一起看看报告。
这个报告是官方写死的一个报告,但是你可以自己去配置文件中修改。我们可以看到在咱们的构建文件中生成了一个叫target的文件夹,在set里面有一个叫jacoco的报告,里面有html的报告,也有xml的报告。
我们打开index这个报告来看一下,里面有两个包。它里面有行覆盖,分支覆盖,语句覆盖等不同覆盖的维度,绿色的表示被覆盖了,红色的表示没有被覆盖。
我们点开其中一个,这里面有两个类,展示的是每个类的覆盖情况。
里面有几种方法,这里面是每个方法的覆盖情况,如果你觉得还不够,我们可以再把方法点开。
点开之后我们可以看到里面就到具体的代码的覆盖的情况了。
以上就是Jacoco的一个基本的流:运行、编译、执行单元测试、统计、出报告。
我们再演示一下如果运行pom.xml的情况,很多朋友现在公司里已经都不用Ant了,用的是Maven,下面我们一起看看用Maven的情况。
最后我们可以看到总共用了7秒多的时间,出的报告还在刚才上面说的那个文件夹,因为它们俩写的路径是一样的。我们可以看到结果界面也都是一样的。
这就是我们所说的单元测试的覆盖率。很多测试的朋友可能会不太关心,因为很多时候这个测试脚本是开发做的。一般的单元测试,咱们的测试人员可能不会去编写测试用例,但是我们可以帮助开发去辅助执行。