软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试技术>>单元测试>>正文
JCoverage使用
文章出处:51tesing论坛 作者:sincky 发布时间:2005-12-10
使用目的
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信息的类。

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

站内搜索
相关文章
◎全面介绍单元测试
◎单元测试指导
◎单元测试的基本方法
◎J2EE应用的性能调整--JPROBE使用篇
◎使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Te...
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(三)
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(二)
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(一)
◎数据库程序的单元测试
◎防御性编码和单元测试“交通规则”
◎单元测试实践(VB版)
◎Linux:让内存不再泄漏
◎感悟测试驱动开发
◎软件测试技术获重大突破
◎PHP单元测试工具PHPUnit初体验
◎使用NUnit在.Net编程中进行单元测试
◎Java性能的优化
◎Java内存泄漏分析
◎Java的内存泄漏
◎NUnit快速入门
◎单元测试方法
◎单元测试浅析
◎java的单元自动化测试---jtest
◎Java程序的单元测试
◎自动进行团队构建和单元测试过程
◎C语言单元测试框架-Check
◎在Eclipse中使用JUnit
◎EasyMock与JMock的比较
◎FindBugs第1部分: 提高代码质量
◎静态测试
◎测试Linux的可靠性
◎TestNG使Java单元测试轻而易举
◎诊断 Java 代码:单元测试与自动化代码分析协同工作
◎JBuilder单元测试实例
◎使用Rational Software Architect
◎怎样使用Junit Framework进行单元测试的编写
◎“白盒”静动测试两齐全
热门文章
◎全面介绍单元测试
◎单元测试------理论篇
◎Java内存泄漏分析
◎单元测试作业指导书(一)
◎junit实现过程
◎白盒测试中的六种覆盖方法
◎JUnit起步
◎单元测试方法
◎C/C++单元测试问答(摘要)
◎nunit使用资料
◎单元测试的基本方法
◎如何挑选白盒测试工具
◎NUnit快速入门
◎在Eclipse中使用JUnit
◎Java的内存泄漏
◎Linux:让内存不再泄漏
◎单元测试的小技巧介绍和举例
◎单元测试指导
◎为什么要进行单元测试?
◎单元测试作业指导书(二)
◎“白盒”静动测试两齐全
◎数据库程序的单元测试
◎静态测试
◎单元测试浅析
◎ant结合junit进行软件自动测试
◎单元测试作业指导书(三)
◎单元测试作业指导书(四)
◎CppUnit - 测试驱动开发入门
◎用cppUnit进行单元测试的步骤
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(一)
◎java的单元自动化测试---jtest
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(三)
◎使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Te...
◎C语言单元测试框架-Check
◎EasyMock与JMock的比较
◎Java程序的单元测试
◎JUnit中如何测试异常
◎怎样使用Junit Framework进行单元测试的编写
◎使用NUnit在.Net编程中进行单元测试
◎J2EE应用的性能调整--JPROBE使用篇
◎单元测试和事先测试开发
◎JBuilder单元测试实例
◎感悟测试驱动开发
◎单元测试实践(VB版)
◎软件测试技术获重大突破
◎C语言高效编程的的四招技巧
◎使用ant编译、运行junit、以及检查编码
◎让编译和测试过程自动化
◎自动进行团队构建和单元测试过程
◎有关Junit的多线程测试

Google提供的广告