Cobertura是一个基于jcoverage的免费Java工具,它能够显示哪一部分代码被你的测试所覆盖,并可生成HTML或XML报告. 本文将介绍如何在项目中使用cobertura来测量单元测试的代码覆盖情况.
首先创建一个Java项目,本文以Eclipse为例:
项目名: CodeCoverageTest
结构图如下:
接下,创建一个Ant构建配置文件,帮我们实现自动化的编译,单元测试以及cobertura来测量单元测试的代码覆盖情况。
Ant的 build.xml文件内容如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <project name="cobertura.examples.basic" default="coverage" basedir=".">
4
5 <!-- 引用 build.properties文件 配置路径信息-->
6 <property file="build.properties" />
7
8 <!-- 设置 cobertura路径 -->
9 <path id="cobertura.classpath">
10 <fileset dir="${cobertura.dir}">
11 <include name="cobertura.jar" />
12 <include name="lib/**/*.jar" />
13 </fileset>
14 </path>
15
16 <!-- 配置 cobatura ant 扩展任务 -->
17 <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
18
19 <target name="init">
20 <mkdir dir="${classes.dir}" />
21 <mkdir dir="${instrumented.dir}" />
22 <mkdir dir="${reports.xml.dir}" />
23 <mkdir dir="${reports.html.dir}" />
24 <mkdir dir="${coverage.xml.dir}" />
25 <mkdir dir="${coverage.html.dir}" />
26 </target>
27
28 <!-- 编译源代码 -->
29 <target name="compile" depends="init">
30 <javac srcdir="${src.dir}:${test.dir}:${src.conf.dir}:${test.conf.dir}" destdir="${classes.dir}" debug="yes">
31 <classpath refid="cobertura.classpath" />
32 </javac>
33 </target>
34
35 <target name="instrument" depends="init,compile">
36 <!--
37 Remove the coverage data file and any old instrumentation.
38 -->
39 <delete file="cobertura.ser"/>
40 <delete dir="${instrumented.dir}" />
41
42 <!--
43 Instrument the application classes, writing the
44 instrumented classes into ${build.instrumented.dir}.
45 -->
46 <cobertura-instrument todir="${instrumented.dir}">
47 <!--
48 The following line causes instrument to ignore any
49 source line containing a reference to log4j, for the
50 purposes of coverage reporting.
51 -->
52 <ignore regex="org.apache.log4j.*" />
53
54 <fileset dir="${classes.dir}">
55 <!--
56 Instrument all the application classes, but
57 don't instrument the test classes.
58 -->
59 <include name="**/*.class" />
60 <exclude name="**/*Test.class" />
61 </fileset>
62 </cobertura-instrument>
63 </target>
64
65 <!-- 单元测试 -->
66 <target name="test" depends="init,compile">
67 <junit fork="yes" dir="${basedir}" failureProperty="test.failed">
68 <!--
69 Note the classpath order: instrumented classes are before the
70 original (uninstrumented) classes. This is important.
71 -->
72 <classpath location="${instrumented.dir}" />
73 <classpath location="${classes.dir}" />
74
75 <!--
76 The instrumented classes reference classes used by the
77 Cobertura runtime, so Cobertura and its dependencies
78 must be on your classpath.
79 -->
80 <classpath refid="cobertura.classpath" />
81
82 <formatter type="xml" />
83 <test name="${testcase}" todir="${reports.xml.dir}" if="testcase" />
84 <batchtest todir="${reports.xml.dir}" unless="testcase">
85 <fileset dir="${test.dir}">
86 <include name="**/*Test.java" />
87 </fileset>
88 <fileset dir="${src.dir}">
89 <include name="**/*Test.java" />
90 </fileset>
91 </batchtest>
92 </junit>
93
94 <junitreport todir="${reports.xml.dir}">
95 <fileset dir="${reports.xml.dir}">
96 <include name="TEST-*.xml" />
97 </fileset>
98 <report format="frames" todir="${reports.html.dir}" />
99 </junitreport>
100 </target>
101
102 <target name="coverage-check">
103 <cobertura-check branchrate="34" totallinerate="100" />
104 </target>
105
106 <!-- 生成 coverage xml格式报告 -->
107 <target name="coverage-report">
108 <!--
109 Generate an XML file containing the coverage data using
110 the "srcdir" attribute.
111 -->
112 <cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.dir}" format="xml" />
113 </target>
114
115 <!-- 生成 coverage html格式报告 -->
116 <target name="alternate-coverage-report">
117 <!--
118 Generate a series of HTML files containing the coverage
119 data in a user-readable form using nested source filesets.
120 -->
121 <cobertura-report destdir="${coverage.html.dir}">
122 <fileset dir="${src.dir}">
123 <include name="**/*.java"/>
124 </fileset>
125 </cobertura-report>
126 </target>
127
128 <target name="clean" description="Remove all files created by the build/test process.">
129 <delete dir="${classes.dir}" />
130 <delete dir="${instrumented.dir}" />
131 <delete dir="${reports.dir}" />
132 <delete file="cobertura.log" />
133 <delete file="cobertura.ser" />
134 </target>
135
136 <target name="coverage" depends="compile,instrument,test,coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/>
137
138 </project>
139
build.properties文件
1 # The source code for the examples can be found in this directory
2 src.dir=../src/java
3 src.conf.dir=../src/conf
4 test.dir=../test/java
5 test.conf.dir=../src/conf
6
7 # The path to cobertura.jar
8 cobertura.dir=cobertura
9
10 # Classes generated by the javac compiler are deposited in this directory
11 classes.dir=../bin
12
13 # Instrumented classes are deposited into this directory
14 instrumented.dir=instrumented
15
16 # All reports go into this directory
17 reports.dir=reports
18
19 # Unit test reports from JUnit are deposited into this directory
20 reports.xml.dir=${reports.dir}/junit-xml
21 reports.html.dir=${reports.dir}/junit-html
22
23 # Coverage reports are deposited into these directories
24 coverage.xml.dir=${reports.dir}/cobertura-xml
25 coverage.html.dir=${reports.dir}/cobertura-html
26
编写示例代码
Hello.java
1 package com.xmatthew.practise.cobertura;
2
3 public class Hello {
4
5 public String birthday(String name) {
6 return "happy birthday to " + name;
7 }
8
9 public String christmas(String name) {
10 return "merry christmas " + name;
11 }
12
13 }
编写测试Hello.java的测试类,进行单元测试
HelloTest.java
1 package com.xmatthew.practise.cobertura;
2
3 import junit.framework.Assert;
4 import junit.framework.TestCase;
5
6 public class HelloTest extends TestCase {
7
8 private Hello hello;
9
10 protected void setUp() throws Exception {
11 hello = new Hello();
12 }
13
14 protected void tearDown() throws Exception {
15 hello = null;
16 }
17
18 public void testBirthday() {
19 String expected = "happy birthday to matt";
20 Assert.assertEquals(expected, hello.birthday("matt"));
21 }
22
23 public void testChristmas() {
24 String expected = "merry christmas matt";
25 Assert.assertEquals(expected, hello.christmas("matt"));
26 }
27
28 }
29
接下来,我们运行 Cobertura来进行测试
运行 Cobertura,测试在Eclipse运行时,要在Ant插件的运行类库环境中加入cobertura相关类库。
查看运行结果报告:
JUnit报告
Cobertura报告
到目前已经完成整个项目的基于Ant进行编译,测试以及生成Cobertura测试报告的开发IDE环境。这个项目框架足以应用日常的开发需求。
Cobertura官网地址: http://cobertura.sourceforge.net/
- 大小: 32.1 KB
- 大小: 22 KB
- 大小: 89.6 KB
- 大小: 26 KB
- 大小: 17.9 KB
分享到:
相关推荐
标题中的“用 Cobertura 测量测试覆盖率”指的是在软件开发过程中使用 Cobertura 工具来评估代码的测试覆盖率。测试覆盖率是衡量测试质量的重要指标,它表示代码中被测试用例执行到的比例。Cobertura 是一个开源的 ...
Cobertura 是一种开源测试工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码以及哪些代码没有执行,来测量测试覆盖率。除了找出未测试到的代码并发现 BUG 外,Cobertura 还可以通过标记无用的、执行...
示例build文件 博文链接:https://zhupan.iteye.com/blog/200878
Cobertura 1.9.1 是一个历史悠久的代码覆盖率工具,主要在Java开发环境中使用。它能够帮助开发者测量和报告程序代码的测试覆盖率,即多少代码被单元测试执行过。这对于确保软件的质量和可靠性至关重要,因为未经过...
Cobertura是一款开源的Java代码覆盖率工具,它用于测量Java程序单元测试的覆盖率。这个"cobertura-1.9.4.1-src.zip"压缩包包含的是Cobertura 1.9.4.1版本的源代码。源代码是任何软件开发的基础,它允许开发者深入...
Cobertura通常通过Ant脚本来集成到项目中,以便在持续集成或开发过程中自动测量代码覆盖率。 关于“源码”标签,这表明Cobertura不仅是一个二进制工具,还提供了源代码,允许用户查看、修改和扩展其功能。这对于...
5. **代码覆盖率**:通过工具如JaCoCo或Cobertura,我们可以测量测试代码覆盖了多少源代码,以评估测试的全面性。 6. **持续集成/持续部署(CI/CD)**:将单元测试集成到CI/CD流程中,每次代码提交后自动运行测试,...
Cobertura 是一个用于 Java 代码覆盖率测试的工具,它能够帮助开发者测量和跟踪他们的源代码有多少被单元测试覆盖。 在描述 "cobertura-1.9.4.1-bin.zip" 中,没有额外的具体信息,但我们可以推断这可能是一个 ZIP ...
Cobertura不仅支持基本的覆盖率类型,还提供了一种称为“包装器覆盖率”的高级功能,用于测量测试代码对第三方库的覆盖情况。 使用代码覆盖率工具的目的是为了更好地实现测试驱动开发(TDD)和持续集成(CI),确保...
如JaCoCo或Cobertura,这些工具可以测量代码被测试覆盖的程度,帮助识别未被测试的代码。 7. 异常处理和错误报告: 使用try-catch语句捕获异常是Java中常见的做法。日志记录工具如Log4j或SLF4J可以帮助记录和分析...
JSCover 是一个易于使用的 JavaScript 代码覆盖率测量工具。它是流行的 JSCoverage工具的增强版本,增加了一些功能,包括分支覆盖率、 LCOV和用于 CI 集成的Cobertura XML报告、用于自动化测试的钩子和HTML 本地存储...
4. **PyTest-Coverage**:Python开发者的首选,用于测量Python代码的覆盖率,并与PyTest测试框架结合使用。 5. **gcov/lcov**:针对C/C++的覆盖率工具,通过GCC编译器插件获取覆盖率数据。 在实际应用中,我们应...
10. **测试覆盖率**:JUnit可以与其他工具(如JaCoCo或Cobertura)集成,来测量代码的测试覆盖率,帮助识别未被测试到的代码。 通过分析`JuintDemo2`这个文件,我们可以学习如何组织和执行测试,理解测试的结构和...
- junitperf用于进行单元测试的性能评估,它可以测量测试方法的执行时间和资源消耗,帮助开发者识别性能瓶颈。 5. **EclEmma覆盖率计算**: - EclEmma是一款集成在Eclipse中的代码覆盖率工具,它可以帮助开发者...
8. 覆盖率工具:JaCoCo、Cobertura等可以帮助测量测试覆盖率,确保足够的代码得到了测试。 9. 测试驱动开发(TDD):一种开发实践,先写测试,再编写满足测试的代码,有助于提高代码质量。 10. 持续集成:Jenkins、...
7. **代码覆盖率工具**: 如JaCoCo或Cobertura,用于测量测试覆盖了多少源代码。这些工具可以帮助我们评估测试的充分性,并确定哪些部分的代码还需要更多的测试。 8. **异常处理和日志记录**: 在测试中,正确地处理...
为了确保测试的全面性,开发者会使用代码覆盖率工具,如JaCoCo或Cobertura,来度量测试用例覆盖了多少源代码。高覆盖率意味着更多的代码得到了验证,降低了隐藏bug的风险。 总结,JDK中的项目测试涵盖了多个方面,...