1.概述

代码覆盖范围一个软件指标用于测量在自动测试期间执行的代码行数有多少行。

在本文中,我们将通过使用的一些实际方面来漫步雅各布- 用于Java项目的代码报告Generator。

2. Maven配置

为了起床和运行jacoco,我们需要宣布这一点maven插件在我们的pom.xml.文件:

  org.jacoco   Jacoco-Maven-Plugin   0.7.7.2016060606060  <执行> <执行>   Prepare-Agent   <执行> 报告 <阶段> prepet-package   报告    

此处提供的链接 - 之前将始终将您带到Maven中央存储库中的最新版本。

3.代码报告报告

在我们开始查看Jacoco的代码覆盖能力之前,我们需要有一个代码样本。这是一个简单的Java函数,检查字符串是否读取相同的向后和转发:

公共布尔IspalIndrome(String InputString){if(inputstring.length()== 0){返回true;} else {char firstchar = inputstring.charat(0);char lastchar = inputstring.CharAt(InputString.Length() -  1);string mid = inputstring.substring(1,InputString.Length() -  1);返回(FirstChar == LastChar)&& IspalIndrome(中旬);}}

我们现在所需要的只是一个简单junit.测试:

@test public void whentemptystring_thenaccept(){palindrome palindrometerester = new palindrome();断言(palindrometerester.ispalindrome(“”));}

使用JUnit运行测试将自动设置Jacoco Agent,因此,它将创建一个覆盖报告二进制格式在目标目录中 -目标/ jacoco.exec。

显然我们无法单手中解释输出,但其他工具和插件可以 - 例如,声纳Qube.

好消息是我们可以使用雅各布:报告目标是以多种格式生成可读代码覆盖率报告 - 例如HTML,CSV和XML。

我们现在可以看一下目标/站点/ jacoco / index.html页面查看生成的报告的外观:

覆盖范围

遵循报告中提供的链接 -palindrome.java.,我们可以通过对每个Java类进行更详细的视图来钻取:

请注意,您可以使用Eclipse内的jacoco直接管理代码覆盖范围零配置, 谢谢Eclemma Eclipse插件

4.报告分析

我们的报告显示21%的指示覆盖范围,17%分支覆盖率,3/5为圈复杂性等等。

报告中Jacoco所示的38条指令指的是字节码指令与普通的Java代码指令相反。

Jacoco Reports通过使用带有不同的分支和背景颜色的颜色来帮助您在视觉上分析代码覆盖:

  • 红色钻石意味着在测试阶段没有在测试期间锻炼分支。
  • 黄钻表明代码部分覆盖 - 有些分支没有锻炼。
  • 绿色钻石意味着在测试期间已经行使了所有分支机构。

相同的颜色代码适用于背景颜色,但是对于线条覆盖率。

Jacoco主要提供三个重要指标:

  • 线条覆盖范围反映基于测试的Java字节代码指令的数量来执行的代码量。
  • 分支覆盖范围显示代码中的行使分支的百分比 - 通常与之相关如果别的转变陈述。
  • 圈复杂性通过提供通过线性组合覆盖代码中的所有可能路径所需的路径数来反映代码的复杂性。

如果没有,则占用一个微不足道的例子如果或者转变代码中的语句,循环复杂性将为1,因为我们只需要一个执行路径来覆盖整个代码。

通常,循环复杂性反映了我们需要实施的测试用例的数量,以便覆盖整个代码。

5.概念故障

雅科莫作为一个Java代理人,它负责仪器识别字节码在运行测试时。Jacoco进入每个指令,并显示在每个测试期间锻炼哪条线。

要收集覆盖数据,Jacoco使用asm.用于驾驶代码仪器,从中接收活动JVM工具界面进行中:

湖科概念

还可以在服务器模式下运行Jacoco Agent,在这种情况下,我们可以使用我们的测试雅各布:转储作为一个目标,启动转储请求。

你可以跟随官方文档链接有关Jacoco Design的更深入的详细信息。金宝搏官网188be

6.代码覆盖分数

现在我们知道Jacoco如何工作,让我们改善我金宝搏官网188be们的代码覆盖率。

为了实现100%代码覆盖,我们需要引入测试,涵盖初始报告中显示的缺失部分:

@test public void whinpalindrom_thenaccept(){palindrome palindrometerester = new palindrome();asserttrue(palindrometerester.ispalindrome(“中午”));@test public vod whinnearpalindrom_thanreject(){palindrome palindrometerester = new palindrome();assertfalse(palindrometerester.ispalindrome(“霓虹灯”));}

现在我们可以说我们有足够的测试来覆盖我们的整个代码,而是要确保它,让我们运行maven命令mvn jacoco:报告要发布报告报告:

覆盖范围

正如您可以看到我们代码中的所有行/分支/路径都完全覆盖:

覆盖范围

在现实世界项目中,随着发展的进一步发展,我们需要继续跟踪代码覆盖率。

雅各布提供了一种简单的宣布方式最低要求应该满足,否则构建将失败。

我们可以通过添加以下方式来做到这一点查看我们的目标pom.xml.文件:

<执行>  jacoco-check    check     <规则> <元素>包  <限制> <计数器>行  hospratio  <最小> 0.50       

正如您可能猜到的那样,我们在这里限制了线条覆盖率的最低分数到50%。

雅科莫:检查目标是边界核实,所以我们可以运行maven命令 -MVN清洁验证检查规则是否受到尊重。日志将显示类似的东西:

[错误]执行目标org.jacoco

7.结论

在本文中,我们已经了解如何利用Jacoco Maven插件来为Java项目生成代码覆盖报告。

虽然,100%代码覆盖率无需反映有效的测试,因为它只反映了在测试期间行使的代码量。在上一篇文章中,我们已经谈到了金宝搏官网188be突变测试与普通相比,以更复杂的方式跟踪测试效果代码覆盖范围

您可以查看链接中本文中提供的示例GitHub项目

通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!