Java Coverage(Cobertura)工具
首先是下载Cobertura的jar包了,这个工具底层是JCoverage,熟悉Jcoverage的对这个也不会陌生的。
Cobertura官网 http://cobertura.sourceforge.net/
大家可以了解很多东西,比如现在的作者啊什么,这里就不介绍了
然后点Download,下载二进制版本,比如名字叫cobertura-1.9.4.1(我用的是最新的version)
最后就是实践了。。下面就给大家讲解一下这个到底是什么玩意
Cobertura是一个开源的java工具,它主要用在java test中 内部封装了JCoverage
它是一个用ant全自动的测试工具,很强大。
如果你想测试覆盖率的话,用这个软件是相当不错的
那么下面就举一个简单的例子来说明它的强大
以下为要测试的Java类
- package com.example.simple;
- /**
- * @author cnchenhl 2011/02/25
- */
- public class PrintStringOfYourName {
- private String name = null;
- private int id = 0;
- private String sex = null;
- private int age = 0;
- private String address;
- public String getName() {
- return name;
- }
- public int getId() {
- return id;
- }
- public String getSex() {
- return sex;
- }
- public int getAge() {
- return age;
- }
- public String getAddress() {
- return address;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setId(int id) {
- this.id = id;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String toString() {
- return "Name :" + name + "ID :" + id + "Age :" + age + "Sex :" + sex + "Address :" + address;
- }
- }
下面是测试的类test
- package com.example.simple;
- import junit.framework.TestCase;
- import org.junit.Before;
- import org.junit.Test;
- /**
- *
- * @author cnchenhl 2011/02/25
- */
- public class PrintStringOfYourNameTest extends TestCase {
- @Before
- public void setUp() throws Exception {
- System.setProperty("Dnet.sourceforge.cobertura.datafile", "D:/TestCorbertura/cobertura.ser");
- }
- @Test
- public void testtoString() {
- PrintStringOfYourName printStringOfYourName = new PrintStringOfYourName();
- printStringOfYourName.setAddress("shanghai");
- printStringOfYourName.setAge(24);
- printStringOfYourName.setId(0);
- printStringOfYourName.setName("chenhailong");
- printStringOfYourName.setSex("male");
- String str = printStringOfYourName.toString();
- assertEquals(str, "Name :chenhailongID :0Age :24Sex :maleAddress :shanghai");
- }
- }
好了准备工作完成了
那就准备自己的ant构建文件了。路径大家要仔细看,可能会有问题的,基本都是你们的路径有问题。
还要说明的一点是
- System.setProperty("Dnet.sourceforge.cobertura.datafile", ""D:/TestCorbertura/cobertura.ser"");
是必须加的,官网指定的,大家要注意。因为instruments容易找不到cobertura.ser 文件,在ant中也要设定
具体的请看构建文件build.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <project name="cobertura.examples.basic" default="coverage" basedir=".">
- <property file="build.properties" />
- <property name="bin.dir" value="${basedir}/bin" />
- <property name="target" value="target" />
- <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}" />
- <mkdir dir="${target}" />
- </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">
- <echo message="copy the file to the classes" />
- <copy todir="${classes.dir}">
- <fileset dir="${bin.dir}">
- <include name="**/*.class" />
- </fileset>
- </copy>
- <delete file="cobertura.ser" />
- <delete dir="${instrumented.dir}" />
- <cobertura-instrument todir="${instrumented.dir}">
- <ignore regex="org.apache.log4j.*" />
- <fileset dir="${classes.dir}">
- <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">
- <classpath location="${instrumented.dir}" />
- <classpath location="${classes.dir}" />
- <classpath >
- </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">
- <cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.dir}" format="xml" />
- </target>
- <target name="summary-coverage-report">
- <cobertura-report srcdir="${src.dir}" destdir="${coverage.summaryxml.dir}" format="summaryXml" />
- </target>
- <target name="alternate-coverage-report">
- <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" />
- <delete dir="${target}" />
- </target>
- <target name="coverage" depends="compile,instrument,test,coverage-report,summary-coverage-report,alternate-coverage-report,band" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports." />
- <target name="band">
- <delete file="${target}/report.zip" />
- <jar destfile="${target}/report.zip" basedir="${reports.dir}">
- <manifest>
- <attribute name="Build-Time" value="${timeStamp.day}" />
- </manifest>
- </jar>
- </target>
- </project>
下面是构建文件需要的环境变量
- # The source code for the examples can be found in this directory
- srcsrc.dir=src
- # The path to cobertura.jar
- cobertura.dir=D:/cobertura-1.9.4.1
- # Classes generated by the javac compiler are deposited in this directory
- classesclasses.dir=classes
- # Instrumented classes are deposited into this directory
- instrumentedinstrumented.dir=instrumented
- # All reports go into this directory
- reportsreports.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
转载于:https://blog.51cto.com/justlpf/1191253
相关文章:
Java 内部类及其原理
Java中实现内部类 内部类相信大家都用过很多次了,就不说它是怎么用的了。 内部类 1.成员内部类 需要注意的是, 当成员内部类拥有和外部类同名的成员变量或这方法时, 默认情况下访问的是内部类的成员, 如要访问外部类的同名成员&am…

二分法:查找区间search for a range
问题描述: 给定一个排序数组nums(nums中有重复元素)与目标值target,如果 target在nums里出现,则返回target所在区间的左右端点下标,[左端点, 右端点],如果target在nums里未出现,则返回[-1, -1]。 例如: ar…

c语言向表格内存入数据,怎么实现横向到存入多个单元格,在列数固定的报表中逐格横向填充数据并折行...
在很多需要打印的报表中,受限于纸张的大小,往往会限制行数或者固定列数。我们在《单据类报表的制作》一文中,曾经介绍了限制了行数的情况如何实现,现在,我们再来看一下,在固定了列数的情况下,如…

设计模式之简单工厂模式
一、概述 工厂模式具体包括了简单工厂、工厂方法、抽象工厂,它们是按照从简单到复杂的顺序排列的,属于设计模式中的创建型,其中简单工厂并不属于GOF的23中模式。 但是它是理解其它的工厂模式的一个很好的基础,所以很多人在讲述设…

zendserver的版本是怎么回事?免费版哪里去了?
zend server 的版本,官网上说是四个版本,免费版、小企业版、专业版、企业版。 但下载只有一个版本。在下载的页面中大大的free download 很是显眼。安装完成之后显示为企业版。使用几天之后,显示你的许可即将到期。 输入密码,登录…

sql-case when 条件1 then 取值1 when 条件2 then 取值2 else 取值3 end
遇到 XXX情况 就 XXX 遇不到就 XXX 结束case when …… then …… else …… end 例如一个3条件取值的字段: case when 条件1 then 取值1 when 条件2 then 取值2 else 取值3 end when后接条件语句,then后为字段取值(数值或字符串等都可以&…

二叉树:二叉搜索树的创建和插入
二叉搜索树又名二叉排序树。 大概简略的思维导图如下,方便记忆特性 基本二叉搜索树创建过程如下 /*数据结构如下*/ typedef struct tree {int data;struct tree *left NULL;struct tree *right NULL; }Tree,*TreeNode;/*Node 为二叉树根节点,insert…

ie7和ie8 select使用jquery clone不兼容处理
本文解决方案基于http://blog.csdn.net/zzx3q/article/details/8017794 在ie7和ie8下,用jquery clone复制一个select,复制的select是本体的select初始化时的一个副本,无法复制目前本体select选择。 解决方案: <!DOCTYPE html&g…

c语言中floox的头文件,PC-1211袖珍计算机在合成氨厂生产中的应用 第五讲 循环语句(FOR-NEXT语句)...
PC-1211袖珍计算机在合成氨厂生产中的应用 第五讲 循环语句(FOR-NEXT语句)在化工生产中为了分析两个或两个以上参数对生产的影响往往需要进行某些有规律的重复计算。这些计算在程序中可以用赋值语句或条件语句来实现,但从下面的介绍可以看出,这时若采用循(本文共7页)阅读全文&g…

C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器)
C#WinformWindowsAPI做个剪贴板无缝自动保存器(视频截图利器) (本文最新代码已上传到GitHub,地址在(https://github.com/bitzhuwei/ClipboardImageSaver)) 利用C#和Window API做了个自动保存剪贴板内的图片的工具&…

Kafka配置SASL/PLAIN认证
1、安装zk,kafka 2、配置server.properties security.inter.broker.protocolSASL_PLAINTEXT sasl.mechanism.inter.broker.protocolPLAIN sasl.enabled.mechanismsPLAIN listenersSASL_PLAINTEXT://0.0.0.0:9092 advertised.listenersSASL_PLAINTEXT://host:9092 3…

二叉树:二叉搜索树的编码和解码
二叉搜索树的编码和解码描述: 编码:即将一个二叉搜索树编码,节点数值转换为字符串 解码:即将一个字符串解码,数值转换为对应的二叉搜索树的节点 过程导图如下: 针对性编码实现如下: /*数字转字符串*/ vo…

springmvc3.2+spring+hibernate4全注解方式整合(一)
<?xml version"1.0" encoding"UTF-8"?> <web-app xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:web"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&…

c 应用程序多语言版本,c – 在win32 API应用程序中实现全球化/多语言功能
Windows上多语言应用程序的基础是使用“资源”.资源是附加在可执行文件末尾的块,它只包含数据,并以非常特定的方式格式化,以便Windows能够解释这些数据.在资源中,您可以找到对话框,字符串表以及版本信息(在资源管理器中文件的属性对话框中显示的信息).您可以通过在Visual C中打…
整数展示分数和整形数的四则运算
文章结束给大家来个序程员笑话:[M] /* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:邱学伟 * 成完日期:2013 年 5 月 4 日 * 版本号:v1.0 * 输入描述:无…

二叉树:二叉搜索树实现 逆序数问题
关于逆序数的问题描述如下: 已知数组nums,求新数组count,count[i]代表了在nums[i]右侧且比 nums[i]小的元素个数。 例如: nums [5, 2, 6, 1], count [2, 1, 1, 0]; nums [6, 6, 6, 1, 1, 1], count [3, 3, 3, 0, 0, 0]; nums [5, -7, 9…

C语言文件实验要求,实验教学的目的和要求.doc
实验教学的目的和要求实验教学的目的和要求:通过实验,让学生全面掌握高级语言程序设计的思想与方法,掌握C语言的特点,C语言的语法规则,C语言的数据类型、表达式及控制流程;通过编程,提高程序设计…

这些工作的日子
已经毕业10个月了,工作了9个月,想说我是个刚毕业的大学僧,没有遇到什么社会上的勾心斗角,没有遇到天大的难题,没有看到那种大起大落的景象,一切还是那样平平淡淡的,当看见附近大学的大学僧的时候…

python基础类型
range:生成指定范围内的数字,只在python2中使用,python3中没有此用法 例:生成0-30内的偶数 转载于:https://www.cnblogs.com/gaoyuxia/p/10239421.html

linux系统目录树/内核源码目录树
关于系统目录树和源码目录树的结构图如下 内核版本: centos 7.0 升级内核之后 3.10.0-957-5.1.e17
顺时针打印二维数组C语言递归,按顺时针打印矩阵
存在二种解题思路: 一种是递归解法,一种是层层递进解法图解递归解法如图所示, 一个5*5的矩阵先打印最外层的圈, 然后剩余最里层3*3的矩阵, 如图.将3*3的矩阵继续打印最外层,思路与打印最外层思路一样,我们就可以考虑使用递归实现.最后只剩余一个元素,也可以看成一个矩阵,不过不…

降低噪声和电磁干扰的原则
1.尽量采用45折线转载于:https://www.cnblogs.com/asulove/p/3827246.html

翻译:java.util.regex.Pattern
java.util.regex.PatternA compiled representation of a regular expression. A regular expression(正则表达式), specified as a string, must first be compiled into an instance of this class(首先编译成Pattern对象). The…
学习笔记53—Wilcoxon检验和Mann-whitney检验的区别
Wilcoxon signed-rank test应用于两个related samples Mann–Whitney U test也叫Wilcoxon rank-sum test,应用于两个independent samples的情samples size小的时候,是有列表的,sample size大到20左右时,就可以使用正态分布来近似…

s-systemtap工具使用图谱(持续更新)
整体的学习思维导图如下,后续持续更新完善 文章目录安装简介执行流程执行方式stap脚本语法探针语法API函数探针举例变量使用基本应用1. 定位函数位置2. 查看文件能够添加探针的位置3. 打印函数参数(结构体)4. 打印函数局部变量5. 修改函数局…

2014 Super Training #8 C An Easy Game --DP
原题:ZOJ 3791 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode3791 题意:给定两个0-1序列s1, s2,操作t次,每次改变m个位置,求把s1改变为s2的方法总数。解法: DP,s1和s2哪些位置…

qq分享组件 android,移动端,分享插件
移动端,分享插件发布时间:2018-06-26 10:03,浏览次数:762最近有一个活动页需要在移动端浏览器分享网页到微信,QQ。虽然每一个浏览器都有分享到微信的能力,但不是每个都提供接口供网页来调用。及时有提供,浏…

MySQL中更改表操作
2019独角兽企业重金招聘Python工程师标准>>> 添加一列: alter table t_stu add tel char(20); 删除一个列: alter table t_stu drop column tel; 添加唯一约束: alter table t_stu add constraint uk_srname unique(scode); 添加主…

Maven-环境配置
二更 可算搞好了,除了下面外,我找到了setting.xml里面的东西,给出来就好了,简单就是mvn -v弄好后,setting.xml里面写好的话,直接加入,然后让eclipse下载jar包 然后就可以运行网上的基本项目了 1…

分布式存储(ceph)技能图谱(持续更新)
一下为个人结合其他人对分布式存储 所需的技能进行总结,绘制成如下图谱,方便针对性学习。 这里对分布式存储系统接触较多的是ceph,所以在分布式存储系统分支上偏向ceph的学习。 如有分类有问题或者分支不合理,欢迎大家批评指正,目…