junit-4.9.jar_JUnit 4.9(测试版3)中的规则

junit-4.9.jar

不久前, David Saff宣布了JUnit 4.9的beta版 。 因此,我认为现在是研究该版本中的新增功能的好时机。

JUnit领域中最有用的创新之一是Rule。 我在这里写了有关规则的文章 。 我在这里写了有关JUnit规则的用例 。 规则很棒。 借助JUnit 4.9,它们变得更好。

您可以将“规则”视为一种将测试的设置和拆卸封装在一个类中而不是两个方法的方法。 但是规则也是一种修改执行测试方式的方法。 您可以运行测试十二次,而不是一次。 或在二十个不同的线程中。 有趣的是,只有单个测试规则。 因此,如果您要坚持设置和拆卸的比较,也就是@Before@After ,在Rule中没有等效的@BeforeClass@AfterClass

现在情况已经改变。 现在,您可以标注类型TestRule的公共静态字段与@ClassRule,它会表现就像是一整个测试类,而不是一个单一的测试定义的规则。 因此,对于需要为所有测试设置一次而不是为每个测试设置一次的东西而言,它是完美的选择。 让我们来看一个例子。

规则的实现可能如下所示:

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;public class LoggingRule implements TestRule {public class LoggingStatement extends Statement {private final Statement statement;public LoggingStatement(Statement aStatement, String aName) {statement = aStatement;}@Overridepublic void evaluate() throws Throwable {System.out.println("before: " + name);statement.evaluate();System.out.println("after: " + name);}}private final String name;public LoggingRule(String aName) {name = aName;}@Overridepublic Statement apply(Statement statement, Description description) {System.out.println("apply: " + name);return new LoggingStatement(statement, name);}}

大多数实现将由两部分组成: TestRule接口的实现和Statement接口的实现。

TestRule替换了以前不推荐使用的MethodRule接口。 这是因为新接口同时支持类级别和方法级别的Rule,因此必须进行一些更改。 TestRule有一个应用apply方法,该方法接受一条Statement并返回一条Statement 。 在执行规则范围内的任何测试之前,将调用此方法。 传入的Statement实际上是可能执行的测试。 这里需要注意两件事:如果您的Rule与@ClassRule批注一起使用,则Statement可能并且将代表多个测试; 调用apply并不意味着Statement实际上会被执行。 由于您的规则返回的任何内容都可能传递给其他规则,因此在实际执行所包含的测试之前,可能会以各种方式对语句进行处理。 apply方法要做的典型事情是将Statement包裹在一个新的Statement中 ,它将执行您所需的逻辑。

Statement接口具有单个方法评估 ,在正常情况下应执行一个测试或一堆测试。 因此,如果采用上述典型方法,则需要包含的Statement 进行一些设置调用评估 ,并进行拆卸。 在上面提供的示例中,我在控制台上打印内容,以便可以看到以什么顺序调用内容。 该语句还传递了一个描述 ,其中包含有关测试的有用的元信息。 它包含名称,定义测试的类,方法名称并提供注释。 因此,您的“规则/声明”可以根据其操作所依据的测试方法来微调其行为。

使用此规则的测试类可能如下所示:

import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;public class RuleTest {@ClassRulepublic static LoggingRule classRule = new LoggingRule("classrule");@Rulepublic static LoggingRule rule = new LoggingRule("rule");@Testpublic void testSomething() {System.out.println("In TestSomething");assertTrue(true);}@Testpublic void testSomethingElse() {System.out.println("In TestSomethingElse");assertTrue(true);}
}

对JUnit4.8规则的唯一更改是@ClassRule批注的存在。 注意,同一类与@ClassRule@Rule批注一起使用。
执行后,测试类的输出如下所示:

apply: classrule
before: classrule
apply: rule
before: rule
In TestSomething
after: rule
apply: rule
before: rule
In TestSomethingElse
after: rule
after: classrule

如您所见,首先将应用类级别的Rule并评估结果Statement 。 仅作为评估的一部分,才应用方法级别的“规则”并评估生成的“ 语句” ,每次测试一次。
请注意:请在规则中使用正确的修饰符。 它们必须是公共的,并且类级别的规则必须是静态的。 取决于您做错了什么(以及您在什么环境中工作),导致的错误可能并不完全有用。 这被认为是一个错误,并且正在修复。

参考:来自Schauderhaft博客的JCG合作伙伴 Jens Schauder的 JUnit 4.9(测试版3)中的规则 。

相关文章 :

  • Java工具:源代码优化和分析
  • 框架使开发人员愚蠢吗?
  • 每个程序员都应该知道的事情
  • JDK中的设计模式
  • Java最佳实践

翻译自: https://www.javacodegeeks.com/2011/09/rules-in-junit-49-beta-3.html

junit-4.9.jar

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

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

相关文章

封装js千分位加逗号和删除逗号

//封装js千分位加逗号和删除逗号alert( format(2545678754.020001) ) //2,545,678,754.03alert( format(-2545678754.020001) ) //-2,545,678,754.02alert( format(2545678754.000000000009) ); //当值很长的时候会出现数字被截取的问题alert( delformat(2,545,678,75…

java集成_Java继承

一.继承1.简介:特点:利于代码复用;缩短开发周期。注:子类不能直接访问父类的私有属性满足“A is a B”的关系就可以形成继承关系例:父类:1 packagecom.swpu.animals;23 public classAnimal {4 //属性5 priv…

查找任意数目参数的最大值

查找任意数目参数的最大值 原文:查找任意数目参数的最大值《C和指针》第7章第4道编程题: 编写一个名叫max_list的函数,它用于检查任意数目的整型参数并返回它们中的最大值。参数列表必须以一个负值结尾,提示列表的结束。 1 /*2 ** 查找任意数…

如何以大数据的JAX-RS响应的形式将JPA结果流化/序列化

有时,有必要通过JPA检索大型数据集(例如,超过1,000,000条记录),并将它们填充到java.util.List的单个实例中是有风险的(内存障碍)。 因此,这是一个快速的解决方案,它可以解…

Tab标签页接口---使用Intent对象

TabHost tabHost getTabHost();Intent it new Intent();it.setClass(Main.this, DateTimePicker.class);TabSpec spectabHost.newTabSpec("tab1");spec.setContent(it);spec.setIndicator("ら戳㎝丁",getResources().getDrawable(android.R.drawable.i…

java猜数字小游戏_Java实现简单猜数字小游戏

本文实例为大家分享了Java实现猜数字游戏的具体代码,供大家参考,具体内容如下完成猜数字游戏需要实现以下几点:获得一个随机数作为“答案数”; 输入数字,与“答案数”作比较(判断大了,小了,相等…

要看的东西

udp发送、接受 tcp 客户端 服务端 http(servlet) http post http get web service cookies session 多线程 io流 集合list set map:循环、迭代器 jmeter、soapui、webdriver、python转载于:https://www.cnblogs.com/stay-sober/p/4158837.h…

简单的基准测试:不可变集合VS持久集合

通常,您需要向集合中添加新元素。 因为您是一个优秀而谨慎的开发人员,所以您希望尽可能保持不变。 因此,向不可变集合中添加新元素将意味着您必须创建一个新的不可变集合,其中包含原始集合的所有元素以及新元素。 您可以使用gua…

java list 合并去重_java 怎么把多个list 合并成一个去掉重复的

展开全部示例代码636f707962616964757a686964616f31333361313838:public static void main(String[] args){List list1 new ArrayList();list1.add(1);list1.add(2);list1.add(3);list1.add(4);List list2 new ArrayList();list2.add(1);list2.add(4);list2.add(7);list2.add…

UITextField实现左侧空出一定的边距

就是通过uitextfield的leftview来实现的,同时要设置leftviewmode。 如果设置左右边距,需要再加上rightView功能 -(void)setTextFieldLeftPadding:(UITextField *)textField forWidth:(CGFloat)leftWidth {CGRect frame textField.frame;frame.size.widt…

java软件工程师 英文简历_2017java程序员英文简历范文

2017java程序员英文简历范文简历写完以后,再检查一下你的简历是否回答了以下问题:它是否清楚并能够让雇主尽快知道你的能力?是否写清了你的能力?是否写清了你要求这份工作的.基础?有东西可删除吗?尽力完善你的简历直到最好。2017java程序员英文简历范…

写给java web一年左右工作经验的人

摘要 大学就开始学习web,磕磕绊绊一路走过来,当中得到过开源社区很多的帮助,总结了这些年来的技术积累,回馈给开源社区。 ps:图片都是从网上盗。。。感谢原作者。 ps:文字千真万确都是我自己写的。 在此&am…

FlexyPool如何支持Dropwizard Metrics包重命名

介绍 FlexyPool严重依赖Dropwizard (以前是Codahale)度量标准来监视连接池的使用情况 。 集成到Dropwizard中后,程序包名称必然会被重命名 。 因此,4.0.0版本将使用io.dropwizard.metrics软件包名称代替com.codahale.metrics 。 …

java网络编程与分布式计算_Java网络编程与分布式计算

基本信息书名:Java网络编程与分布式计算定价:38.00元作者:[澳]赖利出版社:机械工业出版社出版日期:2003-03-00ISBN:9787111115786字数:页码:版次:装帧:开本:编辑推荐内容…

java ref 应用类型_Java四种引用类型

Java四种引用类型在java中,类型就分为两种,基本类型和引用类型或自定义类型。引用类型又分为四种:强引用 StrongReference软引用 SoftReference若引用 WeakReference虚引用 PhantomReference划分这些类型的目的是:是为了更灵活的管…

嵌入式Linux学习笔记

一 嵌入式系统定义: 应用于特定环境的硬件体系。 二 两样非常重要的能力: 1. 掌握各种新概念的能力 2. 调试的能力( 包括软件, 硬件 ) 三 需要的基础知识: 1. 操作系统理论基础 2. 数据结构 3. C,C编程语言 4. 汇编语言 5. Linux基…

java string 内存占用_JVM系列之:String,数组和集合类的内存占用大小

简介之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。数组先看下JOL的代码和输…

maven osgi_OSGi将Maven与Equinox结合使用

maven osgi很长时间以来,我一直在努力理解OSGi的真正含义。 它已经存在很长时间了,但是没有多少人意识到这一点。 它被炒作是一种非常复杂的技术。 这是我为所有Java开发人员简化的尝试。 简而言之, OSGi是一组规范,这些规范支持模…

java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu

这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种:1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据时再反序列化回来&#xff…

Linux安装、卸载软件

在linux环境中,尤其是cenos中安装过一些软件,一般是二进制安装与源码安装,现小结一下linux中的安装与卸载。 一、通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具t…