有条件忽略测试的JUnit规则

我一直认为使用@Ignore停用测试是一个坏主意。 例外,这可能是一种将间歇性失败的测试放入隔离区以供以后处理的方法(如Martin Fowler 在此处所述 )。 随着越来越多的测试不断被忽略和遗忘,这带来了测试套件衰减的危险。 因此,您应该有一个政策来确保测试隔离的时间不会太长。 好吧,所以直到最近我才想到:

在我和Frank共同从事的项目中,我们遇到了此处描述的SWT问题。
在非Windows平台上,断言SWT小部件是否获得了输入焦点不适用于自动测试。

我们决定暂时在非Windows平台上忽略与焦点相关的测试。 尽管我们的构建服务器运行在Linux上,但是我们发现这两个开发环境都运行在Windows上,因此它足够安全。

在JUnit中, 假设是跳过在给定条件下没有意义的测试的方法。 这样表示,我们的测试将如下所示:

public void testFocus() {assumeTrue( isRunningOnWindows() );// ...
}

但是我们根本不希望测试代码与条件混为一谈。 决定是否忽略测试的代码应与测试代码本身分开。

这导致我们创建了ConditionalIgnore批注和相应的规则,以将其挂钩到JUnit运行时中。 事情很简单,最好用一个例子来解释:

public class SomeTest {@Rulepublic ConditionalIgnoreRule rule = new ConditionalIgnoreRule();@Test@ConditionalIgnore( condition = NotRunningOnWindows.class )public void testFocus() {// ...}
}public class NotRunningOnWindows implements IgnoreCondition {public boolean isSatisfied() {return !System.getProperty( "os.name" ).startsWith( "Windows" );}
}

ConditionalIgnore批注需要一个“ condition”属性,该属性指向实现IgnoreContition的类。 在运行时,将创建IgnoreCondition实现的实例,并通过其isSatisfied()方法确定是否忽略测试(返回true)(返回false)。 最后,有一个IgnoreConditionRule,它将注释链接到JUnit运行时中。

如果IgnoreCondition实现决定忽略测试用例,则抛出AssumptionViolatedException。 因此,ConditionalIgnore注释的效果与假定条件将返回false的效果相同。 略有不同,我们认为是一个优势:对于被忽略的测试,不会执行@Before和@After方法。

该规则及其相关类的源代码可以在这里找到。

假设的另一个问题是,它会影响测试统计信息。 如果发现“假定”条件为假,则即使未运行测试,也将其视为通过测试。 为了克服这个问题,您必须提供自己的运行程序,以所需的方式处理AssumptionViolatedException。

即使我只是写了一篇关于忽略测试长度的文章,但我仍然坚信最好不要忽略测试,只有在特殊情况下才应该忽略。

参考:来自Code Affine博客的JCG合作伙伴 Rudiger Herrmann的有条件忽略测试的JUnit规则 。

翻译自: https://www.javacodegeeks.com/2013/11/a-junit-rule-to-conditionally-ignore-tests.html

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

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

相关文章

【学亮IT手记】PL/SQL游标编程

游标提供了一种从表中检索数据并进行操作的灵活手段,主要用在服务器上,处理由客户端发送给服务器端的sql语句,或者是批处理、存储过程、触发器中的数据处理请求。 显式游标 是由用户声明和操作的一种游标,通常用于将查询出的结果集…

CentOS安装zookeeper

第一步,先去Apache下载安装包 http://mirror.bit.edu.cn/apache/zookeeper/ 第二步,上传到服务器并解压 tar -zxvf zookeeper-3.4.6 第三步,新建一个文件夹 #先改个名 mv zookeeper-3.4.6 zookeeper cd zookeeper mkdir data 第四步&#xff…

php根据id查找条件怎么写_thinkphp where()条件查询

今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置。where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括…

3分钟简单了解 prototype 和 __proto__

关于prototype 1. 所有的函数都会有一个prototype属性,属性值是一个普通对象; 2. 当我们去new一个构造函数的实例时,构造函数的原型对象(prototype)会被赋值给它实例的[[Prototype]]属性上; 3. prototype可被称为“显式原型”。…

rdlc报表 矩形高固定_固定资产条码管理系统特点分析

固定资产条码管理系统的特点都有什么?固定资产是维持企业稳定健康发展的重要物质保障,若想最大化发挥固定资产的效能作用,满足生产经营管理的需求,提高应对企业内外部经营环境变化的能力,企业管理者就必须及时了解固定…

Spring 4中@ControllerAdvice的改进

在Spring 4的许多新功能中,我发现了ControllerAdvice的改进。 ControllerAdvice是Component的特殊化,用于定义适用于所有RequestMapping方法的 ExceptionHandler, InitBinder和ModelAttribute方法。 在Spring 4之前, ControllerAd…

bzoj 2007 [Noi2010]海拔——最小割转最短路

题目:https://www.lydsy.com/JudgeOnline/problem.php?id2007 一个点的高度一定不是0就是1。答案一定形如一个左上角的连通块全是0的点、一个右下角的连通块全是1的点。 注意从东到西还有从南到北的边也有用!因为不一定是一个阶梯形的,还可以…

php 四维数组_PHP 多维数组

PHP - 两维数组两维数组是数组的数组(三维数组是数组的数组的数组)。首先,让我们看看下面的表格:品牌库存销量Volvo3320BMW1715Saab52Land Rover1511我们能够在两维数组中存储上表中的数据,就像这样:$cars array(array("Vol…

Vue于React特性对比(二)

一,关于响应式数据更新方式的实现 1)只有在data里面定义的数据才会有响应式更新 vue依赖的defineProperty的数据劫持加上依赖数据,实现数据的响应式更新。可以称之为依赖式的响应。因为依赖所以注定了只会更新与data相关的数据。 2&#xff0…

《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况。 Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检索和显示那些文档&am…

电脑入门完全自学手册_3DMAX零基础入门到精通的学习路线和教程

没有美术基础可以学建模吗?毋庸置疑,只要肯学都是可以的!那么我们今天来说说零基础学习建模要着重注意什么。最高效最快速的入门学习方式:看知识兔视频课程,跟着知识兔老师操作,听知识兔老师讲解&#xff0…

使用Java RMI时要记住的两件事

这是一篇简短的博客文章,介绍使用Java RMI时应注意的两个常见陷阱。 设置java.rmi.server.hostname 如果您感到陌生,Connection拒绝托管: RMI客户端上的错误消息,并且您确定连接应该正常工作(您仔细检查了所有标准配置…

Python-UiAutomator2实现Android自动化测试

本帖转自搜狗测试公众号 【一、前言】 基于Python-UiAutomator2实现Android自动化测试,小编在Android应用的自动化性能测试中进行了实践。本篇将简单介绍python中使用adb、aapt命令的方法以及Python-UiAutomator2使用,后续文章将对环境搭建以及自动化性能…

阅读笔记:ImageNet Classification with Deep Convolutional Neural Networks

概要: 本文中的Alexnet神经网络在LSVRC-2010图像分类比赛中得到了第一名和第五名,将120万高分辨率的图像分到1000不同的类别中,分类结果比以往的神经网络的分类都要好。为了训练更快,使用了非饱和神经元并对卷积操作进行双GPU实现…

vsCode 设置vue 保存自动格式化代码

setting {// vscode默认启用了根据文件类型自动设置tabsize的选项"editor.detectIndentation": false,// 重新设定tabsize"editor.tabSize": 2,// #每次保存的时候自动格式化"editor.formatOnSave": true,// #每次保存的时候将代码按eslint格式进…

您是否敢更改HashMap实现?

如今,有大胆的工程师在为Oracle工作。 昨天尝试确定Heisenbug时,我得出了这个结论。 不足为奇,当我尝试找到解决方案时,该错误似乎消失了。 几个小时后,将问题归结为JDK7更新之间的细微差别,该错误的“ Hei…

php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南

首先我们以添加用户为例来看两个方法://方法①public function addUser(string $userName, string $userPassword, string $telephone, string $userEmail ){}//方法②public function addUser(array $data){}方法①的优点: 通过方法的定义,…

硬件信息修改大师_零成本学习之单片机硬件开发(1)

从今天开始给大家逐步讲解单片机编程,有兴趣的小伙伴们,可以关注本课程,完全免费本人从事从2004年大学毕业开始从事开发工作,先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发,目…

RotateDrawable

用来对Drawable进行旋转,也是通过setLevel来控制旋转的,最大值也是:10000 相关属性如下: fromDegrees:起始的角度,,对应最低的level值,默认为0toDegrees:结束角度,对应最高的level值,默认360pivotX:设置参照点的x坐标,取值为0~1,默认是50%,即0.5pivotY:设置参照点的…

ionic3 自动创建启动背景splash以及图标icon

在新建的项目文件夹下的 resources下就是我们放置图标以及启动背景图片的位置了。 如果现在我们想生成自己的图片的启动背景以及图片,我们需要把resources下的 icon.png 以及splash.png 替换为我们的图片。 icon 图片最好为1024x1024像素 splash 图片最好为2732x2…