`

使用cobertura来测量单元测试的代码覆盖情况

阅读更多

使用 Cobertura 报告代码覆盖率

是否达到 100% 就是问题所在

运行像 Cobertura 或者 Emma 这样的工具时,记住以下方面很重要:在一个特殊的方法中实现 100% 的行覆盖并不意味着该方法没有缺陷或者它已被完全测试。例如,如果您编写了一个针对 if 语句的测试,该测试包含逻辑 And ,而测试针对的是表达式的左侧部分,则像 Cobertura 这样的工具将报告 100% 行覆盖,但是实际上,您仅执行了该语句的 50%;因此仅完成了 50% 的分支覆盖。

现在已经编写了一些测试,如何确定所有这些测试执行什么 呢?幸运的是,此问题可由像 Cobertura 这样的代码覆盖工具来解答。代码覆盖工具可报告测试覆盖率 —— 以行覆盖或分支覆盖形式表示 —— 它表示测试运行时所涉及的代码量。

清单 8 展示了一个 Ant 脚本。该脚本使用 Cobertura 生成一份关于代码覆盖率的 HTML 报告,代码覆盖率通过运行一系列 JUnit 测试获得

Ant的 build.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;thekingant@users.sourceforge.net&gt;
    Copyright (C) 2006 Dan Godfrey
    Cobertura is licensed under the GNU General Public License
    Cobertura comes with ABSOLUTELY NO WARRANTY
    </description>

	<property file="build.properties" />

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

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

	<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.summaryxml.dir}" />
		<mkdir dir="${coverage.html.dir}" />
	</target>

	<target name="compile" depends="init">
		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="yes">
			<classpath refid="cobertura.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="**/*.class" />
				<exclude name="**/*Test.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="cobertura.classpath" />

			<formatter type="xml" />
			<test name="${testcase}" todir="${reports.xml.dir}" if="testcase" />
			<batchtest todir="${reports.xml.dir}" unless="testcase">
				<fileset dir="${src.dir}">
					<include name="**/*Test.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="summary-coverage-report">
		<!--
			Generate an summary XML file containing the coverage data using
			the "srcdir" attribute.
		-->
		<cobertura-report srcdir="${src.dir}" destdir="${coverage.summaryxml.dir}" format="summaryXml" />
	</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="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>

	<target name="coverage" depends="compile,instrument,test,coverage-report,summary-coverage-report,
alternate-coverage-report" description="Compile,
 instrument ourself, run the tests and generate JUnit and coverage reports."/>

</project>


Ant的 build.properties文件内容如下:

# The source code for the examples can be found in this directory
src.dir=src

# The path to cobertura.jar
cobertura.dir=../..

# Classes generated by the javac compiler are deposited in this directory
classes.dir=classes

# Instrumented classes are deposited into this directory
instrumented.dir=instrumented

# All reports go into this directory
reports.dir=reports

# Unit test reports from JUnit are deposited into this directory
reports.xml.dir=${reports.dir}/junit-xml
reports.html.dir=${reports.dir}/junit-html

# Coverage reports are deposited into these directories
coverage.xml.dir=${reports.dir}/cobertura-xml
coverage.summaryxml.dir=${reports.dir}/cobertura-summary-xml
coverage.html.dir=${reports.dir}/cobertura-html

 

  Cobertura 产生了一个如图 1 中所示的 HTML 报告。请注意行覆盖和分支覆盖的百分比是以包计算的。可单击每一个包,获得类级别的行百分比和路径百分比,甚至能看到执行的源代码行和它们执行的次数。

  • 大小: 48.3 KB
分享到:
评论

相关推荐

    用 Cobertura 测量测试覆盖率

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

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

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

    用 Cobertura 测量代码测试覆盖率

    示例build文件 博文链接:https://zhupan.iteye.com/blog/200878

    cobertura1.9.1

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

    cobertura-1.9.4.1-src.zip

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

    cobertura

    Cobertura通常通过Ant脚本来集成到项目中,以便在持续集成或开发过程中自动测量代码覆盖率。 关于“源码”标签,这表明Cobertura不仅是一个二进制工具,还提供了源代码,允许用户查看、修改和扩展其功能。这对于...

    单元功能测试——实验管理系统

    5. **代码覆盖率**:通过工具如JaCoCo或Cobertura,我们可以测量测试代码覆盖了多少源代码,以评估测试的全面性。 6. **持续集成/持续部署(CI/CD)**:将单元测试集成到CI/CD流程中,每次代码提交后自动运行测试,...

    cobertura-1.9.4.1-bin.zip

    Cobertura 是一个用于 Java 代码覆盖率测试的工具,它能够帮助开发者测量和跟踪他们的源代码有多少被单元测试覆盖。 在描述 "cobertura-1.9.4.1-bin.zip" 中,没有额外的具体信息,但我们可以推断这可能是一个 ZIP ...

    代码覆盖率工具介绍.zip

    Cobertura不仅支持基本的覆盖率类型,还提供了一种称为“包装器覆盖率”的高级功能,用于测量测试代码对第三方库的覆盖情况。 使用代码覆盖率工具的目的是为了更好地实现测试驱动开发(TDD)和持续集成(CI),确保...

    java代码测试

    如JaCoCo或Cobertura,这些工具可以测量代码被测试覆盖的程度,帮助识别未被测试的代码。 7. 异常处理和错误报告: 使用try-catch语句捕获异常是Java中常见的做法。日志记录工具如Log4j或SLF4J可以帮助记录和分析...

    JSCover 是一个 JavaScript 代码覆盖率工具,用于测量行、分支和函数的覆盖率_java_代码_相关文件_下载

    JSCover 是一个易于使用的 JavaScript 代码覆盖率测量工具。它是流行的 JSCoverage工具的增强版本,增加了一些功能,包括分支覆盖率、 LCOV和用于 CI 集成的Cobertura XML报告、用于自动化测试的钩子和HTML 本地存储...

    测试覆盖率工具

    4. **PyTest-Coverage**:Python开发者的首选,用于测量Python代码的覆盖率,并与PyTest测试框架结合使用。 5. **gcov/lcov**:针对C/C++的覆盖率工具,通过GCC编译器插件获取覆盖率数据。 在实际应用中,我们应...

    junit测试源代码

    10. **测试覆盖率**:JUnit可以与其他工具(如JaCoCo或Cobertura)集成,来测量代码的测试覆盖率,帮助识别未被测试到的代码。 通过分析`JuintDemo2`这个文件,我们可以学习如何组织和执行测试,理解测试的结构和...

    单元测试一条龙

    - junitperf用于进行单元测试的性能评估,它可以测量测试方法的执行时间和资源消耗,帮助开发者识别性能瓶颈。 5. **EclEmma覆盖率计算**: - EclEmma是一款集成在Eclipse中的代码覆盖率工具,它可以帮助开发者...

    junit单元测试

    8. 覆盖率工具:JaCoCo、Cobertura等可以帮助测量测试覆盖率,确保足够的代码得到了测试。 9. 测试驱动开发(TDD):一种开发实践,先写测试,再编写满足测试的代码,有助于提高代码质量。 10. 持续集成:Jenkins、...

    基于java进行的软件测试实验代码.zip

    7. **代码覆盖率工具**: 如JaCoCo或Cobertura,用于测量测试覆盖了多少源代码。这些工具可以帮助我们评估测试的充分性,并确定哪些部分的代码还需要更多的测试。 8. **异常处理和日志记录**: 在测试中,正确地处理...

    jdk中的项目测试用例

    为了确保测试的全面性,开发者会使用代码覆盖率工具,如JaCoCo或Cobertura,来度量测试用例覆盖了多少源代码。高覆盖率意味着更多的代码得到了验证,降低了隐藏bug的风险。 总结,JDK中的项目测试涵盖了多个方面,...

Global site tag (gtag.js) - Google Analytics