有条件忽略测试的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。
即使我只是写了一篇关于忽略测试长度的文章,但我仍然坚信最好不要忽略测试,只有在特殊情况下才应该忽略。
翻译自: https://www.javacodegeeks.com/2013/11/a-junit-rule-to-conditionally-ignore-tests.html
有条件忽略测试的JUnit规则相关推荐
- junit动态忽略测试_有条件忽略测试的JUnit规则
junit动态忽略测试 我一直认为使用@Ignore停用测试是一个坏主意. 例外,这可能是一种将间歇性失败的测试放入隔离区以供以后处理的方法(如Martin Fowler 在此处所述 ). 随着越来越 ...
- junit测试spring_使用Spring JUnit规则进行参数化集成测试
junit测试spring Spring 4.2附带了全新的JUnit规则: SpringClassRule和SpringMethodRule . 使用JUnit规则的主要优点是让开发人员摆脱Spri ...
- junit测试线程_一个在自己的线程中运行测试的JUnit规则
junit测试线程 有时,能够在单独的线程中运行JUnit测试会很有帮助. 特别是在编写与封装的ThreadLocal或类似对象进行交互的集成测试时,这可能会派上用场. 单独的线程将隐式确保每次测试运 ...
- junit 测试 异常_使用JUnit规则测试预期的异常
junit 测试 异常 这篇文章展示了如何使用JUnit测试预期的异常. 让我们从我们要测试的以下类开始: public class Person {private final String name ...
- 使用JUnit规则测试预期的异常
这篇文章展示了如何使用JUnit测试预期的异常. 让我们从我们要测试的以下类开始: public class Person {private final String name;private fin ...
- Junit - 忽略测试(Ignore Test)
Junit 4 忽略测试(Ignore test)被用来禁止执行junit测试类的某些或者全部测试方法.Junit 提供了@Ignore注解来实现 忽略测试.它可以用来跳过失败.或者抛出异常的测试方法 ...
- junit4 集成测试_使用JUnit规则进行干净的集成测试
junit4 集成测试 JUnit Rules的优势,尤其是在进行集成测试时,几乎不能被高估. 在本文中,我们将阐明ExternalResource扩展的有用性. 在我们必须使用抽象外部资源的第三方库 ...
- junit规则_JUnit规则
junit规则 介绍 在本文中,我想展示一个示例,说明如何使用JUnit Rule简化测试. 最近,我继承了一个相当复杂的系统,并未对所有内容进行测试. 甚至经过测试的代码也很复杂. 通常,我看到缺乏 ...
- junit规则_jUnit:规则
junit规则 规则在测试,测试用例或测试套件周围增加了特殊处理. 他们可以对该类中的所有测试执行通用的其他验证,并发运行多个测试实例,在每个测试或测试用例之前设置资源,然后在之后拆除它们. 该规则可 ...
最新文章
- C++/C++11中std::priority_queue的使用
- 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架
- (转)HTTP 协议之压缩
- linux远程关闭不中断
- mysql报错乱码_连接mysql服务器报错时,出现乱码
- matlab中“存储空间不足,无法处理此命令”
- mongo数据库插入数据_深入研究Mongo数据库
- 使用python构建三层神经网络、softmax函数
- daocloud创建mysql_DaoCloud体验-使用node构建应用程序
- 1019 数字黑洞 (20)
- Android框架揭秘-Android Binder IPC笔记
- regnam r语言_求助:R语言进行增加值分解的一部分代码看不懂,求大神过目
- 计算机网络技术评估与备选方案,创业学复习提纲
- 东方联盟郭盛华获100亿战略入股,到底谁支持他?网友:不敢猜
- 解决ueditor上传图片报Nginx 502 bad gateway问题
- 谷歌翻译 onebox 升级
- 百度地图自定义覆盖物
- 闪电网络的核心概念:RSMC 和 HTLC
- C++的双缓冲队列机制
- 高德地图添加安全密钥
热门文章
- centos7 切换中文输入法 无需安装
- 2-7 SpringBoot常用注解讲解
- python大神交流网站_学习Python必去的8个网站
- 把本地库推送到github远程库
- linux-basic(7)linux文件与目录管理
- SpringBoot多数据源(主从数据源)配置
- spring 注释_Spring@懒惰注释
- spring依赖注入_Spring依赖注入
- java使用缓冲区读取文件_在Java中使用Google的协议缓冲区
- forge开发_使用Forge,WildFly Swarm和Arquillian开发微服务