每日构建(包含自动化测试,至少我是这么做的)可以保证我们的代码每天都在可控制的范围内,任何人对于代码库中的修改都能通过每日构建反馈给开发小组,但是我们如何知道我们所有的测试是否够呢,我们是否遗漏的某些代码的四角了,这些问题通过简单的测试报告是无法获知的,幸好我们有代码测试覆盖工具可以帮助我们消除我们的担忧.
下面我来说一下自己是如何实践代码覆盖率测试的.
如下我已经拥有了自己的工程,工程结构图如下
工程中的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文件已经可以产生测试覆盖率报告了,让我们运行看看结果吧.
|