读书人

junit 跟cobertura 在测试驱动开发中的

发布时间: 2012-08-10 12:19:33 作者: rapoo

junit 和cobertura 在测试驱动开发中的应用

在测试驱动开发中,单元测试非常重要,而测试代码的分支覆盖率和行覆盖率同样重要,目前比较流行的单元测试工具为junit,而覆盖率测试工具cobertura非常好用,现在将2者集成到一块,个人感觉在现实的开发中还是比较实际的,下面看一下集成的过程。

1、工程目录如下:

?
junit 跟cobertura 在测试驱动开发中的应用
?2、编写类

public class OperateType {public static final String ADD = "add";public static final String SUB = "subtract";public static final String MULT = "multiply";public static final String DIV = "divide";public String getType(int typeNumber) {if (typeNumber == 1) {return ADD;} else if (typeNumber == 2) {return SUB;} else if (typeNumber == 3) {return MULT;} else if (typeNumber == 4) {return DIV;} else {return null;}}}

?编写测试类

public class OperateTypeTest {private OperateType operateType ;@Beforepublic void setUp() throws Exception {operateType = new OperateType();}@Afterpublic void tearDown() throws Exception {operateType = null;}@Testpublic void testGetType() {//要达到测试的覆盖率,需要进行充分的验证,所以需要验证5个Assert.assertEquals(OperateType.ADD,operateType.getType(1));Assert.assertEquals(OperateType.SUB,operateType.getType(2));Assert.assertEquals(OperateType.MULT,operateType.getType(3));Assert.assertEquals(OperateType.DIV,operateType.getType(4));Assert.assertEquals(null,operateType.getType(5));}}

?3、配置cobertura信息

build.properties

?

# The source code for the examples can be found in this directorysrc.dir=../src/main/javatest.dir=../src/test/java# The path to cobertura.jarcobertura.dir=../cobertura# Classes generated by the javac compiler are deposited in this directoryclasses.dir=classes# Instrumented classes are deposited into this directoryinstrumented.dir=instrumented# All reports go into this directoryreports.dir=reports# Unit test reports from JUnit are deposited into this directoryreports.xml.dir=${reports.dir}/junit-xmlreports.html.dir=${reports.dir}/junit-html# Coverage reports are deposited into these directoriescoverage.xml.dir=${reports.dir}/cobertura-xmlcoverage.html.dir=${reports.dir}/cobertura-html

?bulid.xml

<?xml version="1.0" encoding="UTF-8"?><project name="cobertura.examples.basic" default="coverage" basedir="."><description>    Cobertura - http://cobertura.sourceforge.net/    Copyright (C) 2003 jcoverage ltd.    Copyright (C) 2005 Mark Doliner <thekingant@users.sourceforge.net>    Cobertura is licensed under the GNU General Public License    Cobertura comes with ABSOLUTELY NO WARRANTY    </description><property file="build.properties" /><property name="project.lib.dir" location="../lib" /><!--<property name="cobertura.dir" location="../cobertura" />--><!-- cobertura lib path --><path id="cobertura.classpath"><fileset dir="${cobertura.dir}"><include name="lib/*.jar" /></fileset></path><!-- project lib path --><path id="project.classpath"><fileset dir="${project.lib.dir}"><include name="*.jar" /></fileset></path><taskdef classpathref="cobertura.classpath" resource="tasks.properties"/><!--Clean task--><target name="clean" description="Remove all files created by the build/test process."><delete dir="${classes.dir}" /><delete dir="${instrumented.dir}" /><delete dir="${reports.dir}" /><delete file="cobertura.log" /><delete file="cobertura.ser" /></target><!--int task--><target name="init"><mkdir dir="${classes.dir}" /><mkdir dir="${instrumented.dir}" /><mkdir dir="${reports.xml.dir}" /><mkdir dir="${reports.html.dir}" /><mkdir dir="${coverage.xml.dir}" /><mkdir dir="${coverage.html.dir}" /></target><!--compile task--><target name="compile" depends="init"><javac encoding="UTF-8" srcdir="${src.dir}" destdir="${classes.dir}" debug="true"><classpath><path refid="project.classpath"/><path refid="cobertura.classpath"/></classpath></javac><javac srcdir="${test.dir}" destdir="${classes.dir}" debug="true"><classpath><path refid="project.classpath"/><path refid="cobertura.classpath"/></classpath></javac></target><target name="instrument" depends="init,compile"><!--Remove the coverage data file and any old instrumentation.--><delete file="cobertura.ser"/><delete dir="${instrumented.dir}" /><!--Instrument the application classes, writing theinstrumented classes into ${build.instrumented.dir}.--><cobertura-instrument todir="${instrumented.dir}"><!--The following line causes instrument to ignore anysource line containing a reference to log4j, for thepurposes of coverage reporting.--><ignore regex="org.apache.log4j.*" /><fileset dir="${classes.dir}"><!--Instrument all the application classes, butdon't instrument the test classes.*******************************************--><include name="com/example/OperateType.class" /></fileset></cobertura-instrument></target><target name="test" depends="init,compile"><junit fork="yes" dir="${basedir}" failureProperty="test.failed"><!--Note the classpath order: instrumented classes are before theoriginal (uninstrumented) classes.  This is important.--><classpath location="${instrumented.dir}" /><classpath location="${classes.dir}" /><!--The instrumented classes reference classes used by theCobertura runtime, so Cobertura and its dependenciesmust be on your classpath.--><classpath refid="project.classpath" /><classpath refid="cobertura.classpath" /><formatter type="xml" /><test name="${testcase}" todir="${reports.xml.dir}" if="testcase" /><batchtest todir="${reports.xml.dir}" unless="testcase"><fileset dir="${test.dir}"><!--Instrument all the test classes, butdon't instrument the application classes.*******************************************--><include name="com/example/OperateTypeTest.java" /></fileset></batchtest></junit><junitreport todir="${reports.xml.dir}"><fileset dir="${reports.xml.dir}"><include name="TEST-*.xml" /></fileset><report format="frames" todir="${reports.html.dir}" /></junitreport></target><target name="coverage-check"><cobertura-check branchrate="34" totallinerate="100" /></target><target name="coverage-report"><!--Generate an XML file containing the coverage data usingthe "srcdir" attribute.--><cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.dir}" format="xml" /></target><target name="alternate-coverage-report"><!--Generate a series of HTML files containing the coveragedata in a user-readable form using nested source filesets.--><cobertura-report destdir="${coverage.html.dir}"><fileset dir="${src.dir}"><include name="**/*.java"/></fileset></cobertura-report></target><target name="coverage" depends="clean,init,compile,instrument,test,coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/></project>

?

运行ant,脚本,产生报告,包括junit的报告和覆盖率的报告


junit 跟cobertura 在测试驱动开发中的应用
?

?

?

读书人网 >驱动开发

热点推荐