`

使用Cobertura统计测试覆盖率

阅读更多
官方:http://cobertura.sourceforge.net/


Cobertura是一个基于jcoverage的免费Java工具,它能够显示哪一部分代码被你的测试所覆盖,并可生成HTML或XML 报告.



cobertura 的大概基本工作思路:
1.对已经编译好的class 文件添加标记
2. 对添加好标记的代码进行单元测试
3. 输出覆盖率统计报告

在ant 中使用cobertura 的基本步骤:
1. 编译代码
2. 定义cobertura 的ant task
3. 用nstrument 命令为编译好的代码添加标记
4. 用junit 命令对添加好标记的代码进行单元测试
5. 用cobertura-report 命令输出报告


build.properties
#源代码目录
src.dir=src  
#测试代码目录
test.dir=test 

# The path to cobertura.jar
cobertura.dir=C:\\cobertura-1.9

# Classes generated by the javac compiler are deposited in this directory
# Classes所产生的javac编译器都存放在这个目录
classes.dir=classes

# Instrumented classes are deposited into this directory
# 所装入classes的存入这个目录
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.html.dir=${reports.dir}/cobertura-html

junit3.dir=D:\\junit3.8.1

junit4.dir=D:\\junit4.4

#数据库驱动的目录
jdbc.dir=path


build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="测试项目" default="coverage" basedir=".">

	<property file="build.properties" />

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

	<path id="junit3.classpath">
		<fileset dir="${junit3.dir}">
			<include name="junit.jar" />
		</fileset>
	</path>

	<path id="junit4.classpath">
		<fileset dir="${junit4.dir}">
			<include name="junit4.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.html.dir}" />
	</target>

	<target name="compile" depends="init">
//源代码
		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="yes">
			<classpath refid="cobertura.classpath" />
			<classpath refid="junit3.classpath" />
			<classpath refid="junit4.classpath" />
			
		</javac>
//测试代码
		<javac srcdir="${test.dir}" destdir="${classes.dir}" debug="yes">
			<classpath refid="cobertura.classpath" />
			<classpath refid="junit3.classpath" />
			<classpath refid="junit4.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" />
				<exclude name="**/Test.class"/>
				<exclude name="com/pattern/**/*.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}" />
			<classpath refid="junit3.classpath"></classpath>
			<classpath refid="junit4.classpath"></classpath>
			<classpath location="${jdbc.dir}"></classpath>

			<!--
				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="${test.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="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="clean,compile,instrument,test,coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports." />

</project>



具体看官方文档
分享到:
评论

相关推荐

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

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

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

    6. **持续集成**:如果你的项目使用了像Jenkins或Travis CI这样的持续集成服务器,你可以配置它们在每次构建时运行Cobertura,以便持续监控测试覆盖率的变化。 总之,Cobertura作为一款强大的测试覆盖率工具,为...

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

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

    pycobertura:Cobertura报告的代码覆盖率差异工具

    它也旨在通过pycobertura diff命令来防止代码覆盖率降低:任何更改的行都应进行测试,并且未覆盖的更改应清晰可见,而不会让遗留的未覆盖代码成为pycobertura diff因此开发人员可以仅专注于其更改。 特征: 显示...

    Java Cobertura

    其中,测试覆盖率是衡量代码质量的关键指标之一。Cobertura是一款开源的Java代码覆盖率工具,它能够帮助开发者了解哪些部分的代码已经被测试覆盖,哪些部分还需要进一步编写测试用例。 #### 二、Cobertura简介 ...

    php7.0.33覆盖率统计全部资源

    代码覆盖率是衡量测试质量的一个重要指标,它表示了源代码被自动化测试执行的程度。在PHP世界中,代码覆盖率统计对于确保软件的质量和可靠性至关重要。 代码覆盖率工具可以帮助开发者了解他们的测试套件是否充分地...

    cobertura-1.9.4.1-bin.zip

    1. **代码覆盖率统计**:Cobertura 可以跟踪 Java 类的方法、条件、分支等是否在测试中被执行,从而计算代码覆盖率。 2. **XML 报告**:生成详细的 XML 格式报告,便于其他工具(如 CI/CD 系统)集成和解析。 3. **...

    diff_processor_new.rar_代码增量覆盖率

    总之,"diff_processor_new.rar_代码增量覆盖率"项目提供了一种有效的方法来跟踪和管理软件开发过程中的代码质量,帮助团队确保每次更新都有足够的测试覆盖率,从而降低潜在的缺陷风险。通过深入理解和运用`diff_...

    istanbul-test:通过 Karma、Mocha、Chai 和伊斯坦布尔演示单元测试和代码覆盖率

    使用下面的代码片段运行测试套件,以便在终端输出中显示单元测试结果和代码覆盖率统计信息。 还将生成一些 Jenkins 友好的 XML 结果文件(用于单元测试的 JUnit 和用于代码覆盖率的 Cobertura)。 node_modules/...

    appengine-testing-1.8.4.zip

    Cobertura插件使开发者能在Gradle构建流程中轻松集成代码覆盖率检查,自动运行并报告测试覆盖率。 6. **开源软件**:开源项目意味着源代码对公众开放,鼓励社区参与和贡献。这有助于项目的持续改进,并促进技术知识...

    覆盖率报告

    这个文件可能包含了详细的覆盖率数据,包括每个源文件、函数、类或测试用例的覆盖率统计。 覆盖率报告的核心知识点包括: 1. **代码覆盖率类型**:常见的覆盖率指标有语句覆盖率、分支覆盖率、条件覆盖率和路径...

    单元测试报告

    4. 统计测试覆盖率,评估测试的充分性。 六、测试总结 单元测试帮助我们在早期发现并修复问题,提高了代码质量,减少了集成测试和系统测试的压力。通过本次测试,网上书店系统的各个模块表现稳定,满足预期功能。...

    各种代码行数统计工具

    Cobertura 是 Java 语言的代码覆盖率工具,虽然主要目的是测量代码覆盖率,但它也可以报告代码行数,帮助开发者理解测试覆盖的情况。 9. **Pylint** Pylint 是一个 Python 代码质量检查工具,虽然其主要功能是...

    Coverage-Workshop.pdf

    - 生成覆盖率报告,展示各种类型的覆盖率统计信息。 - 可视化工具,如IDE内置工具或专门的代码覆盖率分析软件,使分析结果更直观。 - 代码覆盖热点分析,找出哪些代码区域是最频繁执行的,哪些是从未执行的。 - 与...

    5个常用的软件质量指标.doc

    代码覆盖率并不能代表单元测试的整体质量,但可以提供一些测试覆盖率相关的信息,可以和其他一些测试指标一起来使用。 4. 设计/开发约束 软件开发中有很多设计约束和原则,其中包括类/方法的长度、一个类中方法/...

    coverage:LutherNavigator的覆盖率报告

    7. **测试工具**:生成覆盖率报告通常需要使用专门的工具,如JaCoCo、Cobertura、Istanbul等,这些工具可以集成到开发流程中,自动化收集和分析覆盖率数据。 8. **质量保证**:高代码覆盖率并不代表高质量的软件,...

    Coverlet-json-parser

    "Coverlet-json-parser"是一个与C#编程语言相关的项目,主要功能是解析Coverlet生成的JSON格式的测试覆盖率报告。Coverlet是.NET生态中的一个开源代码覆盖率工具,它能够帮助开发者测量他们的单元测试覆盖了多少代码...

    Jenkins配置Sonar教程

    - **5.1 Sonar报告没有显示覆盖率或为零**:这种情况通常是因为构建过程中没有正确配置代码覆盖率工具(如cobertura-maven-plugin)或者SonarQube Scanner没有正确配置。解决方法是检查`pom.xml`中的插件配置是否...

    AndroidEmmaService:艾玛(Emma)报道android服务

    2. **测试覆盖率的准确度**: 由于Emma基于字节码级别的代理,可能无法完全反映所有代码路径的覆盖率,特别是在处理反射、异步操作等复杂场景时。 3. **自动化测试集成**: 可以结合 Espresso 或 JUnit 进行UI测试,...

Global site tag (gtag.js) - Google Analytics