分享
 
 
 

JCoverage使用简明手册

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

不论TestCase写的多么的好和完善,要想确保被测试的代码每一行都被执行,仍然是非常困难的。为了获取关于这方面的信息,我们可以使用JCoverage。

使用目的

JCoverage正如其名,主要用于代码的覆盖测试。通过在被测试类的二进制文件中添加相应的指令,再配合junit,jcoverage可以给出被测试类的代码覆盖率,并给出测试过程中哪些语句被执行,哪些没有。通过这些信息,我们可以了解测试代码的测试质量,以及被测试类中哪些语句需要特别的关注(即那些未被覆盖的语句)。

当前的版本是1.0.5,可以从www.jcoverage.com/downloads.html下载。在实际使用时,需要将jcoverage用到的类放到对应的classpath中。在这个版本中它所依赖的外部类以及版本:

- bcel 5.1 http://jakarta.apache.org/bcel/

- log4j 1.2.8 http://jakarta.apache.org/log4j/

- getopt 1.0.9 http://gnu.org/

- oro 2.0.7 http://jakarta.apache.org/oro/

用法

1. jcoverage可以和ant配合使用,使这一过程自动化。基本用法:

- 编译被测试类和相应的被测试类的junit代码。

- 使用<instrument>,将jcoverage的指令加入到被测试类的二进制文件中。为了保证这一过程能够有效,请在编译被测试类时,设置<javac>的debug属性设为yes。

- 执行junit代码进行代码覆盖测试。这一步需要注意的是,需要将被注入指令的测试类要早于单元测试所需的测试类装入。为了确保这一点,需要使用<classpath>,使注入指令的测试类位于测试类之前。

- 使用<report>产生覆盖测试的报告。

2. 使用例子:

<!-- 采用debug模式编译被测试类 -->

<javac destdir="${dist.coverage.classes}" deprecation="on" debug="yes">

<src path="${src.code}"/>

<classpath refid="classpath"/>

</javac>

<!-- 编译被测试类的junit代码 -->

<javac destdir="${dist.coverage.junit}" deprecation="on">

<src path="${src.junit}"/>

<classpath refid="classpath"/>

</javac>

<!-- 定义jcoverage任务 -->

<path id="jcoverage">

<fileset dir="junit_lib">

<include name="jcoverage.jar"/>

</fileset>

</path>

<taskdef classpathref="jcoverage" resource="tasks.properties"/>

<!-- 给被测试类二进制代码中注入jcoverage的指令 -->

<instrument todir="${dist.coverage.instrument}">

<classpath refid="classpath"/>

<!-- 忽略org.apache.common的应用 -->

<ignore regex="org.apache.common.*"/>

<fileset dir="${dist.coverage.classes} ">

<include name="**/*.class"/>

</fileset>

</instrument>

<!-- 启动junit,进行代码覆盖测试 -->

<junit printsummary="yes" haltonfailure="no" fork="yes">

<classpath>

<!-- 注意:被注入指令的类,位置在测试类之前。

这样确保它们早于测试类备加载,使指令起作用。 -->

<pathelement location="${dist.coverage.instrument}"/>

<path refid="classpath"/>

<pathelement location="${dist. coverage.junit}"/>

</classpath>

<formatter type="xml"/>

<batchtest todir="${doc.jcoverageReport}">

<fileset dir="${src.junit}" includes="**/*Test.java" />

</batchtest>

</junit>

<!-- 产生代码覆盖测试报告 -->

<report srcdir="${src.code}" destdir="${doc.jcoverageReport}">

3. jcoverage提供的ant任务标签有:

- <instrument>,在类的二进制文件中注入jcoverage指令。注意:一定是debug模式下编译的类。

- <report>,产生jcoverage报告,默认格式是HTML。也可以产生XML格式方便应用客户自定义的xslt产生其他格式的报告。产生XML格式的报告:

<report srcdir="${src.code}" destdir="${doc.jcoverageReport}" format="xml">

- <merge>,整合多个由jcoverage产生的输出文件。整个jcoverage实际的运作过程是:首先,jcoverage给测试类注入指令产生新类,被注入指令的类在junit运行过程中产生输出文件(后缀为ser),最后根据输出文件产生报告。如果有多个输出文件,jcoverage提供了<merge>来整合这些文件,最后,从整合文件中产生整体报告。用法:

<merge>

<fileset dir="${basedir}">

<include name="**/jcoverage.ser"/>

</fileset>

</merge>

- <check>,检查测试是否达到设定的标准,它可以和<report>配合使用。使用例子:

例1 :

<check branch="95" line="95"/>,意思是分支覆盖率需要达到95%,行覆盖率达到95%。

例2

<check branch="95" line="95">

<regex pattern="xptoolkit.jcoverage.*" branch="85" line="95"/>

</check>

包名符合xptoolkit.jcoverage.*模式的分支覆盖率达到85%,行覆盖率达到95%其余的分支覆盖率需要达到95%,行覆盖率达到95%。

检查表

在使用jcoverage时需要注意的问题:

- 被jcoverage注入指令的类必须是在debug模式下编译的类。建议将那些使用debug模式编译的类的存放与最终的产品的目录分开。

- 使用了<instrument>的类,与源类的目录也最好分开。

- 对于那些使用了AOP(如AspectJ)技术的项目,jcoverage不能很好的应用到那些已经添加了Aspect信息的类。

- 代码覆盖工具只是给出了指导性的意见,不要过分依赖和相信它的结果。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有