每日构建中的测试覆盖
 

2009-01-08 作者:hxshandle 来源:csdn

 

每日构建(包含自动化测试,至少我是这么做的)可以保证我们的代码每天都在可控制的范围内,任何人对于代码库中的修改都能通过每日构建反馈给开发小组,但是我们如何知道我们所有的测试是否够呢,我们是否遗漏的某些代码的四角了,这些问题通过简单的测试报告是无法获知的,幸好我们有代码测试覆盖工具可以帮助我们消除我们的担忧.

下面我来说一下自己是如何实践代码覆盖率测试的.

如下我已经拥有了自己的工程,工程结构图如下

工程中的ant build是通过eclipse自动生成的,生成方法为右击工程名-->export.

大家可以根据自己的需要来选择生成脚本,我对于家里自己的工程基本都是用eclipse自己的生成的,至于公司则全部手写,其实ant手写也挺快的,而且也非常简单.

好了,我们现在有了ant 脚本,我们加下来需要做的就是将单元测试覆盖的功能加进去.我选择使用cobertura,免费的冬冬生成的报告非常有用,而且能和ant非常好的集成.ant本身并没有cobertura的task支持,我们需要做点手脚让ant明白我们要用cobertura.

首先当然是从cobertura的官网上(http://cobertura.sourceforge.net/)下载cobertura的最新版本,现在最新版本为1.9.

接下来我们需要在我们的build脚本中声明cobertura的 task

    <property name="cobertura.dir" value="D:/developTools/cobertura-1.9" />
    
<path id="cobertura.classpath">
        
<fileset dir="${cobertura.dir}">
            
<include name="cobertura.jar" />
            
<include name="lib/**/*.jar" />
        
</fileset>
    
</path>
    
<delete file="cobertura.ser" />
    
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />

要使用我们必须对我们所需要测试的class文件打上标签

    <target name="instrument">
        
<cobertura-instrument todir="WebRoot/WEB-INF/instrumented-classes">
            
<fileset dir="WebRoot/WEB-INF/classes">
                
<include name="**/*.class" />
            
</fileset>
        
</cobertura-instrument>
    
</target>

标签打好了,接下来就是测试了,这里有一点很重要,就是打上标签的class必须在被测试的class之前出现.

<target name="cover-test" depends="instrument">
        
<mkdir dir="${junit.output.dir}/cover-test" />
        
<junit fork="yes" printsummary="withOutAndErr">
            
<formatter type="xml" />
            
<classpath>
                
<fileset dir="D:/developTools/cobertura-1.9/lib">
                    
<include name="**/*.jar" />
                
</fileset>
            
</classpath>
            
<classpath refid="cobertura.classpath" />
            
<classpath location="D:/developTools/cobertura-1.9/cobertura.jar" />
            
<classpath location="WebRoot/WEB-INF/instrumented-classes" />
            
<classpath>
                
<pathelement path="WebRoot/WEB-INF/classes" />
            
</classpath>
            
<classpath refid="test.classpath" />
            
<batchtest fork="yes" todir="${junit.output.dir}">
                
<fileset dir="test">
                    
<include name="**/*Test*.java" />
                    
<exclude name="**/AllTests.java" />
                
</fileset>
            
</batchtest>
        
</junit>
    
</target>

ok测试也有了,现在该是产生测试报告的时候了

    <target name="coverage-report" depends="cover-test">
        
<cobertura-report destdir="cobertura">
            
<fileset dir="src">
                
<include name="**/*.java" />
            
</fileset>
            
<fileset dir="test">
                
<include name="**/*.java" />
            
</fileset>
        
</cobertura-report>
    
</target>

好了,到这里为止我们的build文件已经可以产生测试覆盖率报告了,让我们运行看看结果吧.


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织