IBM技术论坛:使用 Cobertura 和反射机制提高单元测试中的代码覆盖率

Jenkins整合cobertura完成自动化测试 文章目录前言一、cobertura是什么?二、使用cobertura1.什么是Jenkins2.安装配置Jenkins3.安装Cobertura总结 cobertura简单用用 前言 最近公司想要搞一下代码覆盖率,常用的单元测试覆盖率工具有Jacoco和cobertura,整两个都很优秀,借鉴一下别人对这两个工具的总结。 1.都是使用行覆盖和分支覆盖来统计; 2.覆盖率100%不能说明Testcase的完整性; 3.覆盖率只是一种手段并不能说明问题,最好在Testcase设计完后根据覆盖率在进行补充; 4 阅读详情

引言

单元测试是软件开发过程中重要的质量保证环节。单元测试可以减少代码中潜在的错误,使缺陷更早地被发现,从而降低了软件的维护成本。软件代码的质量由单元测试来保证,而单元测试自身的质量与效率问题也不容忽视。提高单元测试的质量与效率,不仅能够使软件代码更加有保证,而且能够节省开发人员编写或者修改单元测试代码的时间。衡量单元测试质量与效率的指标多种多样,代码覆盖率是其中一个极为重要的指标。一般而言,代码覆盖率越高,单元测试覆盖的范围就越大,代码中潜在错误的数量就越少,软件质量就越高。本文首先介绍代码覆盖率的统计指标类型及常用统计工具,然后重点选取具有代表性的行覆盖率进行分析,介绍两种方法用于提高代码的行覆盖率。

代码覆盖率的统计指标

代码覆盖率指的是一种衡量代码覆盖程度的方式,通常会对以下几种方式进行统计分析:

  • 行覆盖。它又被称作语句覆盖或基本块覆盖。这是一种较为常用且具有代表性的指标,度量的是被测代码中每个可执行语句是否被执行到。
  • 条件覆盖。它度量的是当代码中存在分支时,是否能覆盖进入分支和不进入分支这两种情况。这要求开发人员编写多个测试用例以分别满足进入分支与不进入分支这两种情况。
  • 路径覆盖。它度量的是当代码中存在多个分支时,是否覆盖到分支之间不同组合方式所产生的全部路径。这是一种力度最强的覆盖检测,相对而言,条件覆盖只是路径覆盖中的一部分。

在这三种覆盖指标中,行覆盖简单,适用性广,但可能会被认为是“最弱的覆盖”,其实不然。行覆盖相对于条件或路径覆盖,可以使开发人员通过尽可能少的测试数据和用例,覆盖尽可能多的代码。通常情况下,是先通过工具检测一遍整个工程单元测试的行覆盖情况,然后针对没有被覆盖到的代码,分析其没有被覆盖到的原因。如果是由于该代码所在分支由于不满足进入该分支的条件而没有被覆盖,那么开发人员才会进一步修改或增加测试代码,完成该部分的条件或路径覆盖。

可见,高效高质量的行覆盖是有效进行条件覆盖与路径覆盖的前提。行覆盖率越高,说明没有被覆盖到的代码越少,这样开发人员便会集中精力修改测试用例,覆盖这些数量不多的代码。相反,如果行覆盖率低,开发人员需要逐个检查没有被覆盖到的代码,精力被分散,因此很难提高剩余代码单元测试的质量。

代码覆盖率 = 被测代码行数 / 参测代码总行数 * 100%。 从代码覆盖率的计算方式中可以看出,要提高代码覆盖率,可通过提高被测代码行数,或减少参测代码总行数的方式进行。以下将会从这两个角度分别入手,分析如何提高被测代码行数及减少参测代码总行数。

使用 Cobertura 统计并提高代码的行覆盖率

Cobertura 是一款优秀的开源测试覆盖率统计工具,它与单元测试代码结合,标记并分析在测试包运行时执行了哪些代码和没有执行哪些代码以及所经过的条件分支,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的、执行不到的代码来优化代码,最终生成一份美观详尽的 HTML 覆盖率检测报告。

Cobertura 基本工具包里有四个基本过程及对应的工具:cobertura-check, cobertura-instrument, cobertura-merge, cobertura-report; 这个脚本独立使用较为繁琐,不方便也不利于自动化。不过, Cobertura 在 Maven 编译平台上有相应的 cobertura-maven-plugin 插件,使代码编译、检测、集成等各个周期可以流水线式自动化完成。

Cobertura-maven-plugin 官方版有五个主要目标指令 (goal),如表 1:

表 1. Cobertura 目标指令及作用解释

目标指令 作用解释
Cobertura:check 检查最后一次标注(instrumentation) 正确与否
Cobertura:clean 清理插件生产的中间及最终报告文件
Cobertura:dump-datafile Cobertura 数据文件 dump 指令 , 不常用
Cobertura:instrument 标注编译好的 javaclass 文件
Cobertura:cobertura 标注、运行测试并产生 Cobertura 覆盖率报告

Cobertura 通常会与 Maven 一起使用。因此工程目录结构如果遵循 Maven 推荐的标准的话,一个集成 Cobertura 的基本 POM 文件如清单 1 所示:

清单 1. POM 文件的基本结构
<project> 
  <reporting> 
     <plugins> 
        <plugin>
          <!-- 此处用于将 Cobertura 插件集成到 Maven 中 --> 
          <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.5.2</version> 
         </plugin> 
      </plugins>
   </reporting> 
</project>

如果工程目录结构没有采用 Maven 推荐标准,则需要进行如下额外设置:

清单 2. 适合 Maven 的工程目录结构配置
<build> 
     <!-- Java 源代码的路径配置 -->
     <sourceDirectory>src/main/java</sourceDirectory>
     <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory> 
     <!-- 测试代码的路径配置 -->
     <testSourceDirectory>src/test/java</testSourceDirectory> 
     <!-- 源码编译后的 class 文件的路径配置 --> 
     <outputDirectory>target/classes</outputDirectory>
     <!-- 测试源码编译后的 class 文件的路径配置 -->
     <testOutputDirectory>target/test-classes</testOutputDirectory>
     <plugin> .... </plugin> 
 </build>

单元测试代码编写完成,所有设置配制好后,在工程根目录运行“mvn cobertura:cobertura”Maven 就会对代码进行编译。编译完成之后,就会在项目中运行测试代码并输出测试报告结果到目录 project_base$\target\site\cobertura\index.html,效果如图 1 所示。

图 1. Cobertura 覆盖分析报告
图 1. Cobertura 覆盖分析报告

从以上报告中可见,

  • 代码整体的行覆盖率并不高,有些包或类覆盖率很低,甚至为 0。考虑到这些包或类的特殊性(例如它们已被其他类取代),无需对它们进行单元测试,因此需要从整个测试范围中剔除。
  • 部分类的行覆盖率虽然已接近 100%,但仍存在一些方法(如 set 和 get 方法)由于没有测试的必要却被列入了统计范围,这些方法需要被过滤掉。

针对上述两种改进措施,都可以使用 Cobertura 进行实现。第一种改进措施 Cobertura 可以支持,而第二改进措施则需要对 Cobertura 源码进行修改,重编译后方可支持。下面将详细介绍如何使用 Cobertura 对上述问题进行优化。

过滤不需进行单元测试的包和类

针对项目中不需进行单元测试的包和类,我们可以利用 POM 文件中 Cobertura 的标注 (instrument) 设置,对相应的包和类进行剔除 (exclude) 或筛选 (include),使之不体现在覆盖率报告中,去除它们对整个覆盖率的影响,从而使报告更具针对性。其基本 POM 标签设置及解析如清单 3 中所示。

清单 3. POM 中剔除包和类的设置示例
<configuration> 
    <instrumentation> 
    <excludes> 
    <!--此处用于指定哪些类会从单元测试的统计范围中被剔除 -->
                <exclude>exs/res/process/egencia/Mock*.class</exclude>
                <exclude>exs/res/process/test/**/*Test.class</exclude> </excludes>
    </instrumentation> 
    </configuration> 
    <executions> 
          <execution>
                <goals> 
                     <goal>clean</goal> 
                </goals> 
           </execution>
   </executions>

通过在配置文件中使用 Include 与 Exclude,可以显式地指定哪些包和类被列入单元测试的统计范围,哪些包和类被剔除在此范围之外。正则表达式支持丰富的匹配条件,可以满足大多数项目对单元测试范围的要求。以上代码将 exs.res.process.egencia 下面所有的名称 Mock 开头的类,以及 exs.res.process.egencia.test 包下面以 Test 结尾的类都剔除在测试范围以外。在使用这种配置之后,代码整体的范围被缩小,因此在被覆盖到的代码数量不变的基础上,整个代码覆盖率会较以前提高。输出结果如图 2 所示。

图 2. 包、类过滤效果
图 2. 包、类过滤效果

过滤类中的函数

最新版本中的 Cobertura 只能支持到类级别的过滤,而对于类中方法的过滤是不支持的。因此我们需要通过修改 Cobertura 源码,使 Cobertura 支持对类中方法的过滤。

对 Cobertura 及其插件改动所依据的主要原理是 : 修改 Cobertura-maven-plugin 项目中的 InstrumentationTask 类,增加 Ignoretrival,IgnoreMethod 等新增 POM 参数。配制正则表达式,修改 Cobertura 核心,在标注(instrumentation) 阶段遍历函数名时,检测函数名是否匹配传入的正则表达式,过滤函数体代码,从而把这些函数代码排除在代码覆盖统计之外,节省开发人员对这类代码的测试精力。

清单 4 至清单 6 是对 Cobertura 的几处核心改动,仅供读者参考。

清单 4. 对 Cobertura 核心代码的改动之一
 private void checkForTrivialSignature() { 
     Type[] args = Type.getArgumentTypes(myDescriptor); 
     Type ret = Type.getReturnType(myDescriptor); 
     if (myName.equals("<init>")) { 
         isInit = true; mightBeTrivial = true; return; 
     } 
     if (myName.startsWith("set") && args.length == 1 && ret.equals(Type.VOID_TYPE)) { 
          isSetter = true; 
          mightBeTrivial = true; 
          return; 
     } 
     if ((myName.startsWith("get") || myName.startsWith("is") || myName.startsWith("has")) 
     && args.length == 0 && !ret.equals(Type.VOID_TYPE)) { 
          isGetter = true;
          mightBeTrivial = true;
          return; 
     } 
 }
清单 5. 对 Cobertura Maven plugin 的改动
private String ignoreMethodAnnotation;
private String ignoreTrivial;
/**
  * 创建一个新的对象,用于进行配置。
  */
 public ConfigInstrumentation()
 /**
 * * 该方法用于设置annotation的名字以用于过滤类内部的方法
 * @param ignoreMethodAnnotation
 */
public void setIgnoreMethodAnnotation(String ignoreMethodAnnotation) {
	this.ignoreMethodAnnotation = ignoreMethodAnnotation;
}
public String getIgnoreTrivial() {
	return ignoreTrivial;
}
/**
 * 该方法用于标识测试类中的方法是否无关紧要不需要测试。
 * @param ignoreTrivial
 */
public void setIgnoreTrivial(String ignoreTrivial) {
	this.ignoreTrivial = ignoreTrivial;
}
清单 6. POM 文件中使用修改后的 Cobertura 过滤类中的方法
<reporting> 
<plugins> 
 <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>cobertura-maven-plugin</artifactId>
      <version>2.5.2</version> 
      <configuration> 
            <ignores> 
            <!--经过修改的 cobertura, 支持方法级别的过滤 --> 
            <ignore>*main*</ignore> 
            <!--以上修改指的是过滤项目中所有类中的方法名中含有 main 的方法 --> 
            </ignores>
            <IgnoreTrival>true</IgnoreTrival> 
      </configuration> 
   </plugin>
</plugins> 
</reporting>

以上修改都完成之后, 就可以运行“mvn:site”命令得到报告。图 4 是使用没有被修改的 Cobertura 产生的结果报告,无函数过滤效果。图 5 是使用被修改后的 Cobertura 产生的结果报告,可以从中看出,几个 set 与 get 方法已被排除在统计范围之外。

图 4. 无函数名过滤效果
图 4. 无函数名过滤效果
图 5. 增加函数过滤效果
图 5. 增加函数过滤效果

利用 Java 反射(Reflection) 机制提高代码的行覆盖率

不同的人对反射有不同的理解,大部分人认同的一种观点是:反射使得程序可以检查自身结构以及软件环境,并且根据程序检测到的实际情况改变行为。

为了实现自检,一段程序需要有些信息来表示自身,这些信息就称为元数据(metadata)。Java 运行过程中对这些元数据的自检称为内省(introspection)。内省过程之后往往进行行为改变。总的来说,反射 API 利用以下三种技术来实现行为改变:

  • 直接修改元数据。
  • 利用元数据进行操作。
  • 调解(Intercession), 代码被允许在程序各种运行期进行调整。

Java 语言反射机制提供一组丰富的 API 函数来操作元数据,且提供了少部分重要的 API 来实现 Intercession 能力。

实际项目中,为了保证软件代码的整体质量,单元测试不仅要覆盖类的公有成员,还要覆盖重要的私有成员。而有些私有成员的调用,会被放入到极为复杂的条件分支中。而构造进入这个私有方法的相关条件,可能需要开发人员编写大量测试代码及测试数据。这无疑增加了单元测试的成本。有时为了节省成本,该类私有方法便跳过不测,从而在无形中降低了代码的行覆盖率,影响了软件的整体质量。

而利用反射的一系列特性,我们可以在不改变源代码的情况下,直接对复杂的私有方法进行单元测试,无需增加行覆盖检查中被覆盖的代码行数,从而可以在不增加单元测试成本的前提下,提高代码的行覆盖率与单元测试的整体质量。

清单 7 给出了一段简单的目标测试代码示例。

清单 7. 目标测试代码示例
package exs.res.util;
public class Customer{    
    private String message;    
    public String greet;    
    private String sayHello()
    {
        return "Hello";
    }    
    public String pHello()
    {
        return "pHello";
    }
}

为了测试私有函数 sayHello(),利用反射元数据操作 API 的测试代码为:

清单 8. 利用反射元数据操作 API 的测试代码
                   @Test
public void privateMethodTest() {
  final Method methods[] = Customer.class.getDeclaredMethods();
    for (int i = 0; i < methods.length; ++i) {
        if ("sayHello".equals(methods[i].getName())) {
            //这里会将 sayHello 方法由 private 变为 public,从而可以直接被外部对象访问
            methods[i].setAccessible(true);
            try{
                String anotherString =(String)methods[i].invoke(new Customer(), new Object[0]);
                assertTrue("Hello".equalsIgnoreCase(anotherString));
            }catch(Exception e){
                e.printStackTrace();
            }
            break;
         }
     }
 }
    @Test
    public void privateFieldTest() 
                     throws NoSuchFieldException, SecurityException{
        try{
        Field message = Customer.class.getDeclaredField("message");
        Customer testCustomer = new Customer();
         //这里会将 message 属性由 private 变为 public,从而可以直接被外部对象访问
        message.setAccessible(true);
        message.set(testCustomer, "newMessage");    
        assertTrue("newMessage".equalsIgnoreCase((String)message.get(testCustomer)));
        }catch(Exception e){
            e.printStackTrace();
        }        
}

运行以上单元测试用例来分别对 Customer 的私有方法 sayHello 以及私有属性 message 进行直接访问,结果如图 6 所示。

图 6. 非公有函数测试效果
图 6. 非公有函数测试效果

从图中我们可以看到 Customer 成员的私有方法 sayHello 被测试代码覆盖到。所以,当一些代码函数复杂度过高,到通过构造测试数据或测试用例的方法很难使非公有成员得到运行时,我们就可以利用 Java 反射机制,直接在测试类中调用和测试目标类的非公有成员,从而提高覆盖率。

结语

本文使用两种方法,从两个不同的角度对单元测试中的代码覆盖率进行了增强。改进 Cobertura 来提高单元测试代码覆盖率,主要从缩小参与测试的代码总范围的角度入手,适用于代码总数庞大而被测代码数量不多的情况。而使用 Java 反射机制提高单元测试代码覆盖率,主要从提高被测代码数量的角度入手,适用于被测代码私有成员多且触发条件苛刻的情况。针对项目中对单元测试的不同需求,选取合适的技术来增强单元测试,才能真正提高代码以至项目的总体质量。

参考资料

学习

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
JAVA实战:如何让单元测试覆盖率达到80%甚至以上 看完上面的就知道什么时候或者为什么要编写单元测试了。其他的我们不多说了,直接进入实战操作,这次使用的是springboot+Mockito框架,在最后会指出一些小技巧和bug。 阅读详情

相关推荐

【项目实战】与单元测试有关的Maven插件介绍 - cobertura-maven-plugin插件说明

Cobertura 是一个用于 Java 代码覆盖率检测的开源工具,而 Cobertura Maven Plugin 是它的 Maven 插件,用于在 Maven 项目中集成代码覆盖率检测。Cobertura Maven Plugin,该插件是生产类测试的覆盖率,具体参数设置,可以到技术关联资源查看。

奶爸的编程之路,也就一周冷个三天 928

cobertura java_Java Coverage(Cobertura)工具

首先是下载Cobertura的jar包了,这个工具底层是JCoverage,熟悉Jcoverage的对这个也不会陌生的。大家可以了解很多东西,比如现在的作者啊什么,这里就不介绍了然后点Download,下载二进制版本,比如名字叫cobertura-1.9.4.1(我用的是最新的version)最后就是实践了。。下面就给大家讲解一下这个到底是什么玩意Cobertura是一个开源的java工具,它主要...

weixin_36364022的博客 527

Cobertura代码覆盖率测试工具介绍

Cobertura代码覆盖率测试工具介绍文档,Cobertura代码覆盖率测试工具介绍

使用cobertura-maven-plugin做单元测试覆盖率统计

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34112181的博客 156

cobertura-2.1.1测试案例覆盖率统计工具

Cobertura是一个测试案例覆盖率统计工具,此资源下载后,解压,配置上环境变量即可使用

使用pdfBox实现pdf转图片出现中文方块乱码 简单修改源码解决

参考文章 问题排查:使用pdfbox将pdf转image时STSong-Light字体中文乱码 pdfbox版本是2.0 日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。 正常操作就是安装缺失的 STSong-Light 字体,但是在网上搜到的都是 STSong

aji_csdn的博客 5266

使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率

本文转自http://www.ibm.com/developerworks/cn/java/j-lo-cobertura/   使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率 本文将介绍两种开发实践,用于提高 Java 单元测试中的代码覆盖率。代码覆盖率 = (被测代码 / 代码总数)* 100%。提高被测代码数量或降低代码总数,均可达到提...

那些年我们一起上过的项目 228

车窗标定工作流程

标定简单来说就是修改防夹参数来适配对应的车型,所有的防夹的参数在vers_userdef.h文件中定义。#标定内容。

qq_21274991的博客 4272

Maven + Cobertura代码覆盖率示例

Cobertura是一个免费的Java代码覆盖工具-计算单元测试访问的代码百分比。 在本教程中,我们将向您展示如何使用Maven为您的项目生成Cobertura代码覆盖率报告。 1. Cobertura代码覆盖率报告 不执行任何操作,只需键入以下Maven命令即可自动下载并运行maven-cobertura-plugin 。 c:\project> mvn cobert...

一名可爱的技术搬运工 929

医疗信创国产化替代目前面临哪些难题?如何利用国产虚拟化技术促进医院信创建设

业务系统众多,存在大量信创改造模糊地带,既有老系统,也有新系统,故障点多,管理难度高,IT人力资源不足,其对硬件的支撑能力也提出了越来越高的要求,由此造成硬件成本、管理成本以及能耗成本都非常高。

云宏winhong的博客 2657

LVGL的基础知识总结

另外,还有自定义字库的使用,具体可参考开发手册。

qq_28576837的博客 7390

Cobertura原理

Cobertura原理 Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。 官方地址:http://sourceforge.net/projects/cobertura/  日本下载:http://sourceforge.jp/projects/sfnet_cobertura/releases/ C

army的专栏 8107

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(c++)

本文介绍了YOLOv26在RK3588平台的C++推理部署方案。重点包括:1)扩展Ultralytics导出格式,新增RKNN_ONNX专用导出选项;2)重构Detect Head结构,使其更适合RKNN推理;3)提供C++侧后处理实现建议。该方案保留了Ultralytics训练生态,通过优化模型结构输出,将解码等操作移至C++端,充分发挥Rockchip NPU性能。适用于RK3588/RK356x等平台,需配合rknn-toolkit2使用,为YOLOv26的嵌入式部署提供完整解决方案。

qq_64366203的博客 2177

Java覆盖率工具jacoco,Cobertura

最近研究Java覆盖率工具,了解到了jacoco,Cobertura这两款,但是Cobertura没有维护了,不支持新的java语法。下面简单介绍一下这两个工具的使用。 简介 市场上主要代码覆盖率工具: Emma Cobertura Jacoco Clover(商用) 具体见下表: 工具 Jacoco Emma Cobertura 原理 使用 A...

zzhongcy的专栏 6644

模型瘦身术:YOLOv5无损剪枝实战教程

本文介绍了一种YOLOv5模型的无损剪枝方法,通过"稀疏训练+结构化剪枝+微调"的流程,在不损失精度的前提下显著减小模型尺寸并提升推理速度。具体步骤包括:1)稀疏训练给参数排优先级;2)裁剪不重要通道;3)微调恢复精度;4)验证效果。实战部分详细展示了从环境搭建到剪枝实现的完整流程,并分析了剪枝后在边缘设备部署、实时检测等场景的优势。该方法可使YOLOv5s模型从14MB缩减至2-3MB,推理速度提升30%-50%,适用于资源受限设备的轻量化部署需求。

LXY_LOVE36的博客 104

华为OD机试真题 新系统 9月27号 【数据中心最佳维护窗口】

华为OD机试真题 新系统【数据中心最佳维护窗口】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数据中心最佳维护窗口】多语言题解。

qq_45776114的博客 1155

深入探索代码覆盖率工具:JaCoCo与Cobertura

行覆盖率(Line Coverage):测试执行过程中覆盖的代码行数。分支覆盖率(Branch Coverage):测试执行过程中覆盖的代码分支数。方法覆盖率(Method Coverage):测试执行过程中覆盖的方法数。条件覆盖率(Condition Coverage):测试执行过程中覆盖的条件数。JaCoCo(Java Code Coverage)是一个开源的代码覆盖率库,它提供了多种方式来收集和报告代码覆盖率数据。JaCoCo支持多种集成方式,包括命令行、Ant、Maven和Gradle。

weixin_53840353的博客 1636

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2086

测试覆盖率之cobertura

下面介绍现有的一种测试覆盖率报告方案:cobertura,具体是通过cobertura的maven以及Jenkins插件来实现测试覆盖率的展示。 maven部分 <!-- 在clean时把老的ser文件也清理掉 --> <plugin> <groupId>org.apache.maven.plugins</groupId>...

简单,坚持 3239

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

private(私有)方法单元测试无法覆盖?那就用反射调用来测试private(私有)方法...

代码测试覆盖率是衡量软件质量的重要指标,但常规的Junit不能对private方法进行测试,那么就会影响我们的覆盖率。 不过有一个办法可以在Junit框架中测试private的方法,那就是反射! 我们知道可以通过反射method.invoke来调用某个方法,但如果方法前面为private怎么办呢?我们可以使用method.setAccessible(true);来跳过安全检查,就可以调用p...

weixin_30920091的博客 721

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

cobertura java,使用Java 8的cobertura-maven-plugin

Is it just me or the cobertura-maven-plugin doesn't work with java 8? when it runs I get[INFO] --- cobertura-maven-plugin:2.6:instrument (default) @ provider-impl ---[INFO] Cobertura 2.0.3 - GNU GPL L...

weixin_39960019的博客 453

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

测试覆盖率 之 Cobertura的使用

代码覆盖率是对整个测试过程中被执行的代码的衡量,它能测量源代码中的哪些语句在测试中被执行,哪些语句尚未被执行。

A18285759691的博客 1508

如何有效保证Java代码单元测试覆盖率

我们在开发实际业务代码中时常会出现各种业务代码的bug,导致花大量的时间去修复耽误项目的工期,那如何从技术角度进行有效的保证代码质量呢? 有效的单元测试覆盖率可以保证

JackieJia的博客 4245

Cobertura计算覆盖率

覆盖率计算|使用Cobertura|Defects4J数据集

qq_52883908的博客 1529

针对POJO类get、set方法的单元测试覆盖

有的项目需要单元测试覆盖率的行数达到一定的比例,通常情况下POJO类基本仅仅只是get、set方法,但又占据一大部分的代码行数,通过以下方法可以节省一部分的劳动力。 首先POJO类get、set方法不能有复杂的逻辑操作(如果有最好过滤掉) 通过反射创建实例对象,同时获取该类的Field[] 通过属性描述符PropertyDescriptor获取对应字段的Method 调用Method的in...

qq_28177261的博客 5939
上一篇: IBM技术论坛:单元测试利器 JUnit 4
下一篇: Java自定义注解小结
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值