Java代码覆盖工具

Code Coverage

1. Introduction

代码覆盖(code coverage):为了全面地覆盖测试,必须测试程序的状态以及程序流程,设法进入和退出每一个模块,执行每一行代码,进入软件每一条逻辑和决策分支。——[Software Testing]

Code coverage is An information on what source code is exercised in execution.——Alexandre Iline

其要求通过完全访问代码以查看运行测试用例时经过了哪些部分。
- 语句覆盖(statement coverage)

这是代码覆盖最直接的表现形式,进行语句覆盖目的是保证程序中每一条语句至少执行一次。

  • 分支覆盖(branch coverage)

    试图覆盖软件中所有的路径称为路径覆盖,路径覆盖中最简单的形式则是分支覆盖。但是语句100%覆盖不等于分支100%

  • 方法覆盖(method coverage)

    软件中方法被测试执行的情况

2. Tools

Java代码覆盖工具有两类:第一种添加语句到源码并要求重新编译;第二种是在执行中或执行前修改(instrument)字节码。

2.1 JCov

JCov是Java开始之初由Sun JDk(更早之前是Oracle JDK)开发和使用的。从1.1版本开始,Jcov就可以对Java代码覆盖进行测试和报告。2014年开始作为OpenJDK codetools项目的一部分开始开放源码。其主页https://wiki.openjdk.java.net/display/CodeTools/jcov

2.1.1 JCov for Ant

项目结构:

lib folder:相关的jar
src folder:业务代码
test folder:测试代码

主要在Command line上运行ant(当然,Eclipse也是可以的),build.xml配置步骤如下(大多工具步骤也是如此):
- 编译业务代码以及测试代码

 <javac encoding="iso-8859-1" debug="true" target="1.5" source="1.5"
               srcdir="src"
               destdir="classes">
        </javac>
  • 在业务代码class文件中插入instrumentation。
<instrument productdir="classes" destdir="instr_classes" outtemplate="template.xml">
            <!-- 需要的jar-->
            <implantTo path="." implantRT="lib/jcov.network.saver.jar"/>
        </instrument>
  • 打开Jcov的grabber,再次运行测试代码的class文件(以此收集覆盖信息),关闭grabber,最后打印报告(指定地址以及各式)
   <!--start grabber-->
        <grabber output="result.xml" template="template.xml"/>
        <!--运行测试用例字节码(此时运行,测试用例调用的是被插入instrutation的业务class文件)-->
        <java classname="HelloTest" fork="true" failonerror="true">
            <classpath>
                <pathelement location="lib/jcov.network.saver.jar"/>
                <pathelement location="test_classes"/>
                <pathelement location="instr_classes"/>
            </classpath>
        </java>
        <!--stop grabber-->
        <!-- 生成报告-->
        <grabber-manager command="kill"/>
        <report output="report" jcovfile="result.xml"/>

报告:

2.2 JaCoCo

JaCoco是开放源码的工具包,作为EMMA的替代品被开发出来(同一个开发团队)。项目主页

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值