当前位置: 代码迷 >> 驱动开发 >> junit 跟cobertura 在测试驱动开发中的应用
  详细解决方案

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

热度:456   发布时间:2016-04-28 10:52:49.0
junit 和cobertura 在测试驱动开发中的应用

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

1、工程目录如下:

?

?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 ;	@Before	public void setUp() throws Exception {		operateType = new OperateType();	}	@After	public void tearDown() throws Exception {		operateType = null;	}	@Test	public 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 &lt;[email protected]&gt;	    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 the			instrumented classes into ${build.instrumented.dir}.		-->		<cobertura-instrument todir="${instrumented.dir}">			<!--				The following line causes instrument to ignore any				source line containing a reference to log4j, for the				purposes of coverage reporting.			-->			<ignore regex="org.apache.log4j.*" />			<fileset dir="${classes.dir}">				<!--					Instrument all the application classes, but					don'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 the				original (uninstrumented) classes.  This is important.			-->			<classpath location="${instrumented.dir}" />			<classpath location="${classes.dir}" />			<!--				The instrumented classes reference classes used by the				Cobertura runtime, so Cobertura and its dependencies				must 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, but						don'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 using			the "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 coverage			data 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的报告和覆盖率的报告



?

?

?

  相关解决方案