junit + ant + emma生成代码测试覆盖率报告

源程序:

public class SampleCalculator

{

public int add(int augend , int addend)

{

return augend + addend;

}

public int subtration(int minuend , int subtrahend)

{

return minuend - subtrahend;

}

}

 

测试程序

public class SampleCalculatorTest extends TestCase

{

   public void testAdd()// thhrows IOException 

   {

      SampleCalculator calculator = new SampleCalculator();

     int result = calculator.add(50,20);

      assertEquals(70,result);

   }

  public void testSubtration()

  {

     SampleCalculator calculator = new SampleCalculator();

    int result = calculator.subtration(50,20);

      assertEquals(30,result);

  }

}

 

下面便是测试的ant脚本了,注意修改对应的目录位置和记得引入emma类库时,需要放到对应目录。还有就是需要安装junit和ant。

junit通过assert捕捉错误。

 

<?xml version="1.0"?>

 

 

<project name="SampleProject" basedir="." default="all">

 

<!--You may notice that, I use location instead of value -->

 

<!--Both of them work correctly when I run ant -f build.xml -->

 

<!--But when this file is called by other ant file using ant task-->

 

<!--In the junit task, the relative path cannot be parsed correctly-->

 

<!--When using location, the path will be replaced with absolute path-->

 

<!--The libs contains the emma.jar and emma_ant.jar-->

 

<property name="libs" location="../lib" />

 

<!--This is where we place our instrumented classes-->

 

<property name="bin.instrument.dir" location="../instrbin" />

 

<!--coverage metadata and report location-->

 

<property name="coverage.dir" location="../coverage" />

 

<!--junit report location-->

 

<property name="junitReport.dir" location="../junitReport" />

 

<!--main bin location-->

 

<property name="bin.main.dir" location="../srcbin" />

 

<!--test bin location-->

 

<property name="bin.test.dir" location="../testbin" />

 

<!--main source location-->

 

<property name="src.main.dir" location="../../SampleProject/src" />

 

<!--test source location-->

 

<property name="src.test.dir" location="../../SampleProjectTest/test" />

 

<!--Instrument classes in this path-->

 

<path id="classpath.main">

 

<pathelement location="${bin.main.dir}" />

 

</path>

 

<!--Path where emma.jar and emma_ant.jar exist-->

 

<path id="emma.lib">

 

<pathelement location="${libs}/emma.jar" />

 

<pathelement location="${libs}/emma_ant.jar" />

 

</path>

 

<!--enable emma-->

 

<property name="emma.enabled" value="true" />

 

<!--Add emma task to ant-->

 

<taskdef resource="emma_ant.properties" classpathref="emma.lib" />

 

<!--Default task-->

 

<target name="all" depends="clean,compile-src.main,compile-src.test,

instrument,test,gen-report-junit,gen-report-coverage">

 

</target>

 

<target name="compile-src.main">

 

<mkdir dir="${bin.main.dir}" />

 

<javac destdir="${bin.main.dir}" includeantruntime="on"

 

debug="on">

 

<src path="${src.main.dir}" />

 

</javac>

 

<copy todir="${bin.main.dir}">

 

<fileset dir="${src.main.dir}">

 

<exclude name="**/*.java" />

 

</fileset>

 

</copy>

 

</target>

 

<target name="compile-src.test">

 

<mkdir dir="${bin.test.dir}" />

 

<javac destdir="${bin.test.dir}" includeantruntime="on" debug="on">

 

<src path="${src.test.dir}" />

 

<classpath location="${bin.main.dir}" />

 

</javac>

 

<copy todir="${bin.test.dir}">

 

<fileset dir="${src.test.dir}">

 

<exclude name="**/*.java" />

 

</fileset>

 

</copy>

 

</target>

 

<!--Instrument the src main bin, place the instrumented class in bin.instrument.dir-->

 

<!--metadata file will be placed in coverage.dir-->

 

<target name="instrument">

 

<mkdir dir="${bin.instrument.dir}" />

 

<mkdir dir="${coverage.dir}" />

 

<emma enabled="${emma.enabled}">

 

<instr instrpathref="classpath.main" destdir="${bin.instrument.dir}" metadatafile="${coverage.dir}/metadata.emma" merge="true">

 

</instr>

 

</emma>

 

<copy todir="${bin.instrument.dir}">

 

<fileset dir="${bin.main.dir}">

 

<exclude name="**/*.java" />

 

</fileset>

 

</copy>

 

</target>

 

 

 

<!--Run test case, generate junit report and coverage report-->

 

<target name="test">

 

<mkdir dir="${junitReport.dir}" />

 

<junit fork="true" forkmode="once" printsummary="withOutAndErr" errorproperty="test.error" showoutput="on">

 

 

<!--Refer to metadata.emma to collect run information-->

 

<jvmarg value="-Demma.coverage.out.file=${coverage.dir}/metadata.emma" />

 

<jvmarg value="-Demma.coverage.out.merge=true" />

 

<!--Test support package-->

 

<classpath location="${bin.instrument.dir}" />

 

<classpath location="${bin.test.dir}" />

 

<classpath refid="emma.lib" />

 

<formatter type="xml" />

 

<!--Batch test exclude inner class-->

 

<batchtest todir="${junitReport.dir}" haltonfailure="no">

 

<fileset dir="${bin.test.dir}">

 

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

 

</fileset>

 

</batchtest>

 

</junit>

 

</target>

 

<target name="gen-report-junit">

 

<!--Generate junit report-->

 

<junitreport todir="${junitReport.dir}">

 

<fileset dir="${junitReport.dir}">

 

<include name="*" />

 

</fileset>

 

<report format="frames" todir="${junitReport.dir}" />

 

</junitreport>

 

</target>

 

<!--Generate the coverage report-->

 

<target name="gen-report-coverage">

 

<!-- if enabled, generate coverage report(s): -->

 

<emma enabled="${emma.enabled}">

 

<report sourcepath="${src.main.dir}" sort="+block,+name,+method,+class" metrics="method:70,block:80,line:80,class:100">

 

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

 

<include name="*.emma" />

 

</fileset>

 

<html outfile="${coverage.dir}/coverage.html" depth="method" columns="name,class,method,block,line" />

 

</report>

 

</emma>

 

</target>

 

<!--Clean srcbin, instrumented bin,junit report, coverage report-->

 

<target name="clean">

 

<delete dir="${bin.instrument.dir}" />

 

<delete dir="${coverage.dir}" />

 

<delete dir="${junitReport.dir}" />

 

<delete dir="${bin.main.dir}" />

 

<delete dir="${bin.test.dir}" />

 

</target>

 

 

</project>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值