我一直认为使用@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

有条件忽略测试的JUnit规则相关推荐

  1. junit动态忽略测试_有条件忽略测试的JUnit规则

    junit动态忽略测试 我一直认为使用@Ignore停用测试是一个坏主意. 例外,这可能是一种将间歇性失败的测试放入隔离区以供以后处理的方法(如Martin Fowler 在此处所述 ). 随着越来越 ...

  2. junit测试spring_使用Spring JUnit规则进行参数化集成测试

    junit测试spring Spring 4.2附带了全新的JUnit规则: SpringClassRule和SpringMethodRule . 使用JUnit规则的主要优点是让开发人员摆脱Spri ...

  3. junit测试线程_一个在自己的线程中运行测试的JUnit规则

    junit测试线程 有时,能够在单独的线程中运行JUnit测试会很有帮助. 特别是在编写与封装的ThreadLocal或类似对象进行交互的集成测试时,这可能会派上用场. 单独的线程将隐式确保每次测试运 ...

  4. junit 测试 异常_使用JUnit规则测试预期的异常

    junit 测试 异常 这篇文章展示了如何使用JUnit测试预期的异常. 让我们从我们要测试的以下类开始: public class Person {private final String name ...

  5. 使用JUnit规则测试预期的异常

    这篇文章展示了如何使用JUnit测试预期的异常. 让我们从我们要测试的以下类开始: public class Person {private final String name;private fin ...

  6. Junit - 忽略测试(Ignore Test)

    Junit 4 忽略测试(Ignore test)被用来禁止执行junit测试类的某些或者全部测试方法.Junit 提供了@Ignore注解来实现 忽略测试.它可以用来跳过失败.或者抛出异常的测试方法 ...

  7. junit4 集成测试_使用JUnit规则进行干净的集成测试

    junit4 集成测试 JUnit Rules的优势,尤其是在进行集成测试时,几乎不能被高估. 在本文中,我们将阐明ExternalResource扩展的有用性. 在我们必须使用抽象外部资源的第三方库 ...

  8. junit规则_JUnit规则

    junit规则 介绍 在本文中,我想展示一个示例,说明如何使用JUnit Rule简化测试. 最近,我继承了一个相当复杂的系统,并未对所有内容进行测试. 甚至经过测试的代码也很复杂. 通常,我看到缺乏 ...

  9. junit规则_jUnit:规则

    junit规则 规则在测试,测试用例或测试套件周围增加了特殊处理. 他们可以对该类中的所有测试执行通用的其他验证,并发运行多个测试实例,在每个测试或测试用例之前设置资源,然后在之后拆除它们. 该规则可 ...

最新文章

  1. C++/C++11中std::priority_queue的使用
  2. 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架
  3. (转)HTTP 协议之压缩
  4. linux远程关闭不中断
  5. mysql报错乱码_连接mysql服务器报错时,出现乱码
  6. matlab中“存储空间不足,无法处理此命令”
  7. mongo数据库插入数据_深入研究Mongo数据库
  8. 使用python构建三层神经网络、softmax函数
  9. daocloud创建mysql_DaoCloud体验-使用node构建应用程序
  10. 1019 数字黑洞 (20)
  11. Android框架揭秘-Android Binder IPC笔记
  12. regnam r语言_求助:R语言进行增加值分解的一部分代码看不懂,求大神过目
  13. 计算机网络技术评估与备选方案,创业学复习提纲
  14. 东方联盟郭盛华获100亿战略入股,到底谁支持他?网友:不敢猜
  15. 解决ueditor上传图片报Nginx 502 bad gateway问题
  16. 谷歌翻译 onebox 升级
  17. 百度地图自定义覆盖物
  18. 闪电网络的核心概念:RSMC 和 HTLC
  19. C++的双缓冲队列机制
  20. 高德地图添加安全密钥

热门文章

  1. centos7 切换中文输入法 无需安装
  2. 2-7 SpringBoot常用注解讲解
  3. python大神交流网站_学习Python必去的8个网站
  4. 把本地库推送到github远程库
  5. linux-basic(7)linux文件与目录管理
  6. SpringBoot多数据源(主从数据源)配置
  7. spring 注释_Spring@懒惰注释
  8. spring依赖注入_Spring依赖注入
  9. java使用缓冲区读取文件_在Java中使用Google的协议缓冲区
  10. forge开发_使用Forge,WildFly Swarm和Arquillian开发微服务