`
flashcloud
  • 浏览: 188802 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用Cobertura进行覆盖测试应注意的几个细节

阅读更多
使用Cobertura中,编写build.xml时,请注意如下两个细节:
1.
<javac debug="yes" srcdir="${source.dir}" destdir="${classes.dir}" classpathref="build.classpath" />
如上代码所示,请增加debug="yes"
如果无此属性,则在生成的覆盖报告中,所有类的 Line Coverage是N/A。同时注意观察Ant的构建输出,提示"[cobertura-instrument] WARN   visitEnd, No line number information found for class cn.com.sungole.medapp.Web.App.  Perhaps you need to compile with debug=true?">。

2.
<classpath location="${instrumented.dir}" />
<classpath>
	<path refid="build.classpath"></path>
	<pathelement location="${test.classes.dir}" />
	<pathelement location="${classes.dir}" />
</classpath>

请在junit中注意添加“<classpath location="${instrumented.dir}" />”,并注意与下边classpath的顺序,不能颠倒。
如果无此节点,则生成的覆盖报告中,所有类的 Line Coverage均为0%。
同时,Ant的构建正确输出中
    [junit] Running cn.com.sungole.medapp.domain.test.BillTest
    [junit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 2.593 sec
    [junit] Cobertura: Loaded information on 10 classes.
    [junit] Cobertura: Saved information on 10 classes.
将无最后两行输出信息。

完整的配置示例:

<?xml version="1.0"?>
<project name="coberturaSample1">
	<property name="default.target.dir" value="target" />
	<property name="classes.dir" value="${default.target.dir}/classes" />
	<property name="test.classes.dir" value="${default.target.dir}/test-classes" />
	<property name="test.report.dir" value="${default.target.dir}/test-reports" />
	<property name="lib.dir" value="${basedir}/lib" />
	<property name="javadoc.dir" value="${default.target.dir}/apidocs" />

	<property name="source.dir" value="src" />
	<property name="test.source.dir" value="test" />

	<property name="test.pattern" value="**/**Test.java" />

	<!-- Coverage reports are deposited into these directories -->
	<property name="cobertura.dir" value="${default.target.dir}/cobertrua" />
	<!-- Instrumented classes are deposited into this directory -->
	<property name="instrumented.dir" value="instrumented" />

	<path id="classpath">
		<fileset dir="${lib.dir}" includes="**/*.jar" />
	</path>
	<path id="cobertura.classpath">
		<fileset dir="${lib.dir}">
			<include name="cobertura.jar" />
			<include name="*.jar" />
		</fileset>
	</path>

	<taskdef classpathref="cobertura.classpath" resource="tasks.properties">
	</taskdef>

	<target name="clean">
		<delete dir="${classes.dir}" quiet="true" />
		<delete dir="${test.classes.dir}" />
		<delete dir="${default.target.dir}" />
	</target>

	<target name="init" depends="clean">
		<mkdir dir="${classes.dir}" />
		<mkdir dir="${test.classes.dir}" />
		<mkdir dir="${javadoc.dir}" />
		<mkdir dir="${default.target.dir}" />
		<mkdir dir="${instrumented.dir}" />
		<path id="build.classpath">
			<fileset dir="${lib.dir}">
				<include name="**/*.jar" />
			</fileset>
			<fileset dir="${default.target.dir}">
				<include name="**/*.jar" />
			</fileset>
		</path>
	</target>

	<target name="compile-source" depends="init" description="compiles all .java files in source directory">
		<javac debug="yes" srcdir="${source.dir}" destdir="${classes.dir}" classpathref="build.classpath" />
	</target>

	<target name="instrument" depends="compile-source">
		<delete file="cobertura.ser" />
		<delete file="${instrumented.dir}" />

		<!--Instrument the application classes, writing the instrumented classes into ${build.instrumented.dir}.-->
		<cobertura-instrument todir="${instrumented.dir}">
			<ignore regex="org.apache.log4j.*" />
			<fileset dir="${classes.dir}">
				<!-- Instrument all the application classes, but don't instrument the test classes.-->
				<include name="**/*.class" />
				<exclude name="**/*Test.class" />
			</fileset>
		</cobertura-instrument>
	</target>

	<target name="jar" depends="instrument" description="生成jar 文件。Comppresstion .jar file">
		<jar jarfile="${default.target.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
		</jar>
	</target>

	<target name="complie-tests" depends="jar" description="compiles all .java files in test directory ">
		<javac debug="yes" srcdir="${test.source.dir}" destdir="${test.classes.dir}" classpathref="build.classpath">
		</javac>
	</target>

	<target name="javadoc" depends="init">
		<javadoc author="true" use="true" version="true" charset="gbk" sourcepath="${source.dir}" classpathref="build.classpath" destdir="${javadoc.dir}">
		</javadoc>
	</target>

	<target name="test" depends="complie-tests" description="runs JUnit tests">
		<mkdir dir="${test.report.dir}" />

		<copy file="src/hibernate.cfg.xml" todir="target/classes" />
		<copy file="src/log4j.properties" todir="target/classes" />
		<copy todir="target/classes">
			<fileset dir="src" />
			<globmapper from="*.hbm.xml" to="*.hbm.xml" />
		</copy>

		<junit haltonfailure="no" printsummary="on" fork="yes" dir="${basedir}">
			<sysproperty key="basedir" value="${basedir}"/>
			<formatter type="xml"/>
			
			<!--
				Note the classpath order: instrumented classes are before the
				original (uninstrumented) classes.  This is important.
				如果缺少此行,则在覆盖率报告中,所有的类会出现"Line Coverage 为 0%"的现象
			-->			
			<classpath location="${instrumented.dir}" />
			
			<classpath>
				<path refid="build.classpath"></path>
				<pathelement location="${test.classes.dir}" />
				<pathelement location="${classes.dir}" />
			</classpath>
			
			<formatter type="xml" />
			<batchtest todir="${test.report.dir}">
                <fileset dir="${test.source.dir}">  
                    <include name="${test.pattern}" />  
                </fileset>
			</batchtest>
		</junit>
	</target>
	
	<target name="converage-check">
		<cobertura-check branchrate="40" totallinerate="100" />
	</target>
	
	<target name="converage-report">
		<cobertura-report srcdir="${source.dir}" destdir="${cobertura.dir}" format="html"/>
	</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="${cobertura.dir}">
			<fileset dir="${source.dir}">
				<include name="**/*.java"/>
			</fileset>
		</cobertura-report>
	</target>
	
	<target name="coverage" depends="jar,instrument,test,converage-report,alternate-coverage-report"></target>
	
	<target name="all" depends="coverage,javadoc" />
</project>
分享到:
评论

相关推荐

    使用Cobertura统计单元测试覆盖率

    【使用Cobertura统计单元测试覆盖率】 在软件开发过程中,单元测试是确保代码质量的重要环节。它能够帮助我们发现潜在的错误,提高代码的可维护性。然而,仅仅编写单元测试是不够的,我们还需要知道这些测试覆盖了...

    用 Cobertura 测量测试覆盖率

    标题中的“用 Cobertura 测量测试覆盖率”指的是在软件开发过程中使用 Cobertura 工具来评估代码的测试覆盖率。测试覆盖率是衡量测试质量的重要指标,它表示代码中被测试用例执行到的比例。Cobertura 是一个开源的 ...

    Cobertura代码覆盖测试工具:cobertura-2.1.1

    Cobertura是一款强大的Java代码覆盖率测试工具,它的主要任务是对Java源代码进行度量,以确定测试套件在运行时覆盖了多少代码。这个过程对于确保软件的质量和完整性至关重要,因为全面的测试覆盖率可以帮助开发者...

    Cobertura代码覆盖率测试工具介绍

    Cobertura 代码覆盖率测试工具介绍 Cobertura 是一种开源测试工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码以及哪些代码没有执行,来测量测试覆盖率。除了找出未测试到的代码并发现 BUG 外,...

    cobertura-2.1.1测试案例覆盖率统计工具

    6. **示例**:可能还会包含一些示例项目,演示如何配置和使用Cobertura进行覆盖率测试。 为了开始使用Cobertura 2.1.1,你需要进行以下步骤: 1. **安装**:将解压后的文件夹移动到你的系统上的一个合适位置,例如...

    cobertura代码覆盖率工具

    Cobertura 代码覆盖率工具...Cobertura 代码覆盖率工具是一个功能强大且易于使用的工具,能够帮助开发者衡量代码的测试覆盖率。通过使用 Cobertura 工具包,开发者可以生成详细的代码覆盖率报告,从而提高代码的质量。

    cobertura测试代码

    “Cobertura测试代码”通常指的是使用Cobertura工具对Java项目进行代码覆盖率分析的实践过程。这个过程包括安装Cobertura、配置构建工具(如Maven或Gradle)、运行测试并生成报告,以及解读和改进测试覆盖率。...

    Java测试覆盖率工具cobertura1.9

    4. 执行测试:在Ant任务中,使用`cobertura-instrument`任务对源代码进行处理,然后运行单元测试(如JUnit或TestNG),同时记录覆盖率数据。 5. 生成报告:最后,使用`cobertura-report`任务生成HTML格式的覆盖率...

    cobertura

    标题“Cobertura”指的是一个开源的Java代码覆盖率工具,它可以帮助开发者衡量和理解他们的测试套件对代码的覆盖程度。Cobertura通过分析类文件,跟踪代码执行情况,然后生成详细的报告,显示哪些行代码被测试覆盖,...

    Junit+ant+cobertura示例

    总的来说,"Junit+ant+cobertura示例"是一个展示如何使用JUnit进行单元测试,通过Ant进行自动化构建,并利用Cobertura进行代码覆盖率分析的实践案例。这样的组合可以帮助开发者更高效地管理和提升代码质量,确保软件...

    cobertura和weblogic整合使用-代码覆盖率测试

    cobertura和weblogic整合使用-代码覆盖率测试 里面详细步骤和使用说明,并附加xml文件,不懂的可以QQ我,147806015,

    cobertura 1.9.4.1

    Cobertura 是一个开源的 Java 代码覆盖率工具,主要用于衡量软件项目中单元测试的覆盖程度。版本 1.9.4.1 是该工具的一个稳定版本,它为开发者提供了详细的信息,帮助他们了解测试代码对源代码的覆盖范围,从而提升...

    cobertura1.9.1

    Cobertura 1.9.1 是一个历史悠久的代码覆盖率工具,主要在Java开发环境中使用。它能够帮助开发者测量和报告程序代码的测试覆盖率,即多少代码被单元测试执行过。这对于确保软件的质量和可靠性至关重要,因为未经过...

    cobertura工具包

    2. **运行测试**:在Maven中,你可以使用`mvn cobertura:cobertura`命令来运行测试并生成覆盖率报告。Gradle中则对应相应的任务命令。 3. **查看报告**:Cobertura会生成HTML格式的覆盖率报告,你可以通过浏览器...

    测试覆盖率报告

    在标签“测试覆盖”下,我们可以深入探讨测试覆盖率的几个关键方面。 首先,我们要理解什么是测试覆盖率。测试覆盖率通常分为多种类型,如语句覆盖、分支覆盖、条件覆盖、判定覆盖等。其中: 1. 语句覆盖:衡量每...

    cobertura-2.1.1

    【 cobertura-2.1.1 】是针对软件开发中的一个关键工具,主要用于衡量单元测试的覆盖率。单元测试是对软件中的最小可测试单元进行检查和验证,如函数、方法或对象。它确保代码的各个部分按预期工作,并在后续的开发...

    Java Cobertura

    为了使用Cobertura对上述的Java类进行覆盖率分析,我们需要进行以下步骤的配置: 1. **修改build.xml文件**:如果使用的是Ant,则需要在build.xml文件中加入Cobertura插件的相关配置。 2. **执行测试**:运行...

    cobertura源代码

    Cobertura是一款开源的Java代码覆盖率工具,它用于衡量你的测试套件覆盖了多少源代码。在软件开发过程中,代码覆盖率是衡量测试质量的一个重要指标,它可以帮助开发者了解测试的全面性和有效性。Cobertura通过静态...

    cobertura-1.9.4.1-src.zip

    Cobertura是一款开源的Java代码覆盖率工具,它用于测量Java程序单元测试的覆盖率。这个"cobertura-1.9.4.1-src.zip"压缩包包含的是Cobertura 1.9.4.1版本的源代码。源代码是任何软件开发的基础,它允许开发者深入...

Global site tag (gtag.js) - Google Analytics