cobertura 使用_使用Cobertura,JUnit,HSQLDB,JPA涵盖您的测试

cobertura 使用

你好!你好吗?

今天让我们谈谈一个非常有用的工具,名为“ Cobertura”。 该框架与我们在另一篇文章中看到的Emma框架具有相同的功能。

Cobertura和Emma之间的主要区别在于Cobertura显示带有图形的简历页面。

如果要查看有关此主题的其他主题,请单击以下链接: 使用JUnit Ant和Emma进行的测试覆盖 // // 使用HSQLDB,JPA和Hibernate进行的JUnit // TDD –第一步 。

我将使用本文中的相同代码( 带有HSQLDB,JPA和Hibernate的JUnit ); 如果您想设置一个环境来运行代码,则可以按照在那里找到的步骤进行操作(您将在本文末尾找到要下载的源代码)。
我不是熟练的Ant用户,您可能会看到一些代码并认为“此脚本不好”。 随意告诉我如何“升级”蚂蚁代码的想法。 ;)

让我们下载Cobertura库– Download1.9.4.1

下载完成后,将jar文件(/cobertura.jar、/lib/*包括asm,jakarta,log4j)放入我们项目的lib文件夹中。

在我们项目的根源中,使用以下代码创建一个名为“ build.xml”的文件创建的文件必须位于您项目的根目录中,否则您的项目将无法运行 ):

<project name="Cobertura Coverage" basedir="."><!--  Project Source  Code --><property name="src.dir" value="src" /><property name="build.dir" value="bin" /><property name="teste.dir" value="src/test" /><property name="lib.dir" value="lib" /><property name="report.dir" value="cobertura" /><!-- Project classpath --><path id="project.classpath"><pathelement location="${bin.dir}" /><fileset dir="${lib.dir}"><include name="*.jar" /></fileset></path><!-- Tested Class --><property name="DogFacadeTest" value="test.com.facade.DogFacadeTest" /></project>

在上面的代码中,我们正在创建源代码和库的路径。 让我们创建一个任务,以删除由Cobertura生成的文件和已编译的Java源代码。

<!-- Clears the paths -->
<target name="01-CleannUp" description="Remove all generated files."><delete dir="${build.dir}" /><delete file="cobertura.ser" /><delete dir="${report.dir}" /><mkdir dir="${build.dir}" /><mkdir dir="${report.dir}" />
</target>

要编译我们的源代码,请在下面添加代码并运行任务(确保代码可以编译):

<!-- Compiles the Java code -->
<target name="02-Compile" depends="01-CleannUp" description="invoke compiler"><javac debug="true" debuglevel="vars,lines,source" srcdir="${src.dir}" destdir="${build.dir}"><classpath refid="project.classpath" /></javac><copy file="${src.dir}/META-INF/persistence.xml" todir="${build.dir}/META-INF" />
</target>

让我们设置Cobertura,以便它可以测试测试类并准备好环境:

<!-- Cobertura configs -->
<property name="cobertura.instrumented-classes.dir" value="${report.dir}/instrumented-classes" />
<property name="cobertura.data.file" value="cobertura.ser" />
<path id="cobertura.classpath"><fileset dir="${lib.dir}" includes="/*.jar" />
</path><!-- Points to the cobertura jar -->
<taskdef classpath="${lib.dir}/cobertura.jar" resource="tasks.properties" classpathref="cobertura.classpath" /><!-- Instruments the classes -->
<target name="03-Instrument" depends="02-Compile"><delete quiet="false" failonerror="false"><fileset dir="${cobertura.instrumented-classes.dir}" /></delete><delete file="${cobertura.data.file}" /><cobertura-instrument todir="${cobertura.instrumented-classes.dir}"><fileset dir="${build.dir}"><include name="**/*.class" /><exclude name="**/*Test.class" /></fileset></cobertura-instrument><copy todir="${cobertura.instrumented-classes.dir}"><fileset dir="${src.dir}" casesensitive="yes"><patternset id="resources.ps" /></fileset></copy>
</target>

添加下面的代码,您将能够通过ant使用JUnit执行测试:

<!-- Set up the instrumented classes path -->
<path id="cover-test.classpath"><fileset dir="${lib.dir}" includes="**/*.jar" /><pathelement location="${cobertura.instrumented-classes.dir}" /><pathelement location="${build.dir}" />
</path><!-- Run the JUnit test -->
<target name="04-RunTest" depends="03-Instrument" ><junit printsummary="yes" haltonerror="no" haltonfailure="no"  fork="yes"><batchtest><fileset dir="${build.dir}" includes="**/*Test.class" /></batchtest><classpath refid="cover-test.classpath" /></junit><delete file="transaction.log" />
</target>

作为我们的最后一个动作,让我们使用Cobertura创建报告。 将下面的代码添加到“ build.xml”中并执行任务:

<!-- Creates the Cobertura report -->
<target name="00-CreateReport" depends="04-RunTest"><cobertura-report srcdir="${cobertura.data.file}" destdir="${report.dir}"><fileset dir="${src.dir}"><include name="**/*.java" /></fileset></cobertura-report><delete dir="${report.dir}/instrumented-classes" /><delete file="cobertura.ser"  />
</target>

更新您的Eclipse项目(在项目中按F5键),您将看到报告创建成功。 打开“ cobertura”文件夹中的“ index.html”文件。

Cobertura框架可帮助我们计算应测试方法的次数。 在编写家庭作业“ Dog equals”方法时,请创建报告,这样您可能会发现自己的“ equals”未涵盖在内。 创建测试并再次运行报告。

您可以在此处从我们的项目中下载源代码 。

如果您有任何疑问或疑问,请在下面写下。

再见。 \ o_

参考:我们的JCG合作伙伴 提供的Cobertura,JUnit,HSQLDB,JPA涵盖了您的测试   uaiHebert博客上的Hebert Coelho。


翻译自: https://www.javacodegeeks.com/2012/02/covering-your-tests-with-cobertura.html

cobertura 使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TypeScript系列教程13】String 字符串对象的基本使用

目录 TypeScript String(字符串) 语法 String 对象属性 弦方法 TypeScript String(字符串) String 对象用于处理文本(字符串)。 语法 var txt = new String("string"); 或者更简单方式: var txt = "string";String 对象属性 下表列出了 Stri…

Matlab和C++混合编程

1 利用 mexopencv 实现各种数据的转换 int i MxArray(prhs[0]).toInt(); double d MxArray(prhs[0]).toDouble(); bool b MxArray(prhs[0]).toBool(); std::string s MxArray(prhs[0]).toString(); cv::Mat mat MxArray(prhs[0]).toMat(); // For pixels cv::Mat ndmat M…

摇杆控制方向原理_图文全面讲解多种方向控制阀的原理和区别....

液压阀是用来控制液压系统中油液的流动方向或调节其流量和压力的。方向控制阀作为液压阀的一种&#xff0c;利用流道的更换控制着油液的流动方向单向型方向控制阀是只允许气流沿一个方向流动的方向控制阀&#xff0c;如单向阀、梭阀、双压阀等换向型方向控制阀是可以改变气流流…

原型设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

【TypeScript系列教程14】Array数组对象的常见的方法

目录 TypeScript Array(数组) concat() every() filter() forEach() join() lastIndexOf() map() pop() push(

DELPHI跨平台的临界替代者

在WINDOWS里面使用临界来保护多线程需要访问的共享对象&#xff0c;现在&#xff0c;DELPHI有了新的跨平台临界保护者--System.TMonitor 代码演示如下&#xff1a; FConnections : TObjectDictionary<TIdTCPConnection,TDSTCPChannel>.Create; 。。。 procedure TCMServe…

laravel 控制器中使用中间件_在 Laravel 中使用 Slack 进行异常通知

php中文网最新课程每日17点准时技术干货分享异常处理是软件开发过程中无法逃避的问题。对于一套设计良好代码高效的程序&#xff0c;出现异常的可能性会比较低&#xff0c;但这并不意味着不会出现异常,有些异常甚至会引起严重的后果&#xff0c;所以如何及时的发现程序中的异常…

【TypeScript系列教程15】TypeScript 元组

我们知道数组中元素的数据类型都是相同的,如果存储的元素数据类型不同,则需要使用元组。 元组中允许存储不同类型的元素,元组可以作为参数传递给函数。 创建元组的语法格式如下: var tuple_name = [value1,value2,value3,…value n] 声明一个元组并初始化: var mytup…

[转]ListView学习笔记(一)——缓存机制

要想优化ListView首先要了解它的工作原理&#xff0c;列表的显示需要三个元素&#xff1a;ListView、Adapter、显示的数据&#xff1b; 这里的Adapter就是用到了适配器模式&#xff0c;不管传入的是什么View在ListView中都能显示出来。 下面简单说下上图的原理&#xff1a; 1、…

jax-rs jax-ws_Tomcat上具有JAX-WS的Web服务

jax-rs jax-ws让我们假设一家企业正在一个集中式系统中维护用户身份验证详细信息。 我们需要创建一个AuthenticationService&#xff0c;它将获取凭据&#xff0c;对其进行验证并返回状态。 其余的应用程序将使用AuthenticationService对用户进行身份验证。 创建Authentication…

golang反编译_【Golang】脱胎换骨的defer(一)

Go语言的defer是一个很方便的机制&#xff0c;能够把某些函数调用推迟到当前函数返回前才实际执行。我们可以很方便的用defer关闭一个打开的文件、释放一个Redis连接&#xff0c;或者解锁一个Mutex。而且Go语言在设计上保证&#xff0c;即使发生panic&#xff0c;所有的defer调…

【TypeScript系列教程16】TypeScript 联合类型

TypeScript 联合类型 联合类型(Union Types)可以通过管道 (|) 将变量设置多种类型,赋值时可以根据设置的类型来赋值。 注意:只能赋值指定的类型,如果赋值其它类型就会报错。 创建联合类型的语法格式如下 Type1|Type2|Type3 实例 声明一个联合类型: TypeScript var …

HTML 4.01 规定了三种文档类型

HTML 4.01 规定了三种文档类型&#xff1a;Strict、Transitional 以及 Frameset。 严格的——该 DTD 包含所有 HTML 元素和属性&#xff0c;但不包括展示性的和弃用的元素&#xff08;比如 font&#xff09;。不允许框架集&#xff08;Framesets&#xff09;。 <!DOCTYPE HT…

cad填充图案乱理石_CAD软件中如何自定义CAD填充图案?

在使用浩辰CAD软件绘制完成图纸后&#xff0c;发现自己绘制的CAD图纸没有做好区域分割&#xff0c;显得特别乱。这个时候该怎么办呢&#xff1f;快试试CAD填充图案吧&#xff01;接下来就由小编来给大家介绍一下浩辰CAD软件中自定义CAD填充图案的操作教程吧&#xff01;浩辰CAD…

单例设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

Vue.js 组件编码规范

提供一种统一的编码规范来编写 Vue.js 代码。这使得代码具有如下的特性&#xff1a;* 其它开发者或是团队成员更容易阅读和理解。 * IDEs 更容易理解代码&#xff0c;从而提供高亮、格式化等辅助功能 * 更容易使用现有的工具 * 更容易实现缓存以及代码包的分拆基于模块开发始终…

centos图形化桌面的文件在哪_CentOS 安装图形桌面

1.显示系统已经安装的组件&#xff0c;和可以安装的组件:#yum grouplist|grep -i "x window"2.如果系统安装之初采用最小化安装&#xff0c;没有安装xwindow&#xff0c;那么先安装&#xff1a;#yum groupinstall "X Window System"3.安装GNOME桌面环境yum…

java高级架构师进阶路线,年薪百万的架构师都是按照这个路线学习的

一个合格的架构师,在接到这些产品,业务需求的时候,一定要能够全面的思考,给出除了业务需求外的系统需求,并要求自己或其他同学要去设计和实现这些系统需求。 所以你需要掌握这些知识点 目录 1.基本功 七大软件设计原则 设计模式 2.架构师审美观 spring源码分析

每天一个linux命令(53)--ps命令

要毁掉一天&#xff0c;从早上开始。 Linux中的ps命令是 process status 的缩写。ps 命令用来列出系统中当前运行的那些进程。ps 命令列出的是当前那些进程的快照&#xff0c;就是执行ps 命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用…

ansi编码转换_8b/1b编码是个什么东东

使用串行比并行总线可以节省更多的布线空间&#xff0c;芯片、电缆等的尺寸可以做得更小&#xff0c;同时传输速率更高。但是&#xff0c;在很多数字系统如CPU、DSP、FPGA等内部&#xff0c;进行数据处理的最小单位都是Byte&#xff0c;即8个bit&#xff0c;如何把一个或多个By…