如何对套件中的所有测试用例应用 JUnit @Rule

2024-01-06

我正在使用 JUnit 4.10 来运行测试套件,并且按照 Matthew Farwell 在如何立即重新运行失败的 JUnit 测试? https://stackoverflow.com/questions/8295100/how-to-re-run-failed-junit-tests-immediately邮政。我使用以下代码创建了一个“RetryTestRule”类:

public class RetryTestRule implements TestRule {

  private final int retryCount;

  public RetryTestRule(int retryCount) {
    this.retryCount = retryCount;
  }

  @Override
  public Statement apply(Statement base, Description description) {
    return statement(base, description);
  }

  private Statement statement(final Statement base, final Description description) {
    return new Statement() {
      @Override
      public void evaluate() throws Throwable {
        Throwable caughtThrowable = null;

        // retry logic
        for (int i = 0; i < retryCount; i++) {
          try {
            base.evaluate();
            return;
          } catch (Throwable t) {
            caughtThrowable = t;
            System.err.println(description.getDisplayName() + ": run " + (i + 1) + "     failed");
          }
        }
        System.err.println(description.getDisplayName() + ": Giving up after " + retryCount
            + " failures");
        throw caughtThrowable;
      }
    };
  }
}

当在测试用例中使用它作为规则时,它工作得很好,但在套件的每个测试用例中使用 @Rule 符号而不是套件定义中的单个符号似乎不是最佳选择,所以在检查了一点之后,我尝试了我的 Suite 类中的新 @ClassRule 表示法:

@RunWith(Suite.class)
@SuiteClasses({
  UserRegistrationTest.class,
  WebLoginTest.class
})
public class UserSuite {    
  @ClassRule
  public static RetryTestRule retry = new RetryTestRule(2);
}

问题是这不能按预期工作:失败的测试不会被重试。有没有人尝试过这个并知道解决方案?非常感谢帮助!


@ClassRule每个类执行一次,而不是每个方法执行一次。要让每个方法执行一次,您需要使用@Rule就像你正在做的那样,或者按照答案如何在套件中定义JUnit方法规则? https://stackoverflow.com/questions/7639353/how-to-define-junit-method-rule-in-a-suite/7653558#7653558.

要重用现有规则,您可以使用以下命令将规则添加到要运行的规则列表中:RunRules类如下:

public class MyRunner extends BlockJUnit4ClassRunner {
    public MyRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    @Override
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
        Description description= describeChild(method);
        if (method.getAnnotation(Ignore.class) != null) {
            notifier.fireTestIgnored(description);
        } else {
            RunRules runRules = new RunRules(methodBlock(method), Arrays.asList(new TestRule[]{new RetryTestRule(3)}), description);
            runLeaf(runRules, description, notifier);
        }
    }
}

这是使用上面答案中的示例。您也可以将这两个答案结合起来以进行更细粒度的控制,例如,如果您的测试中有注释,则创建一个 RetryTestRule。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对套件中的所有测试用例应用 JUnit @Rule 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • Scala 2.10.1 中新的脱糖行为

    假设我有这个单子类 case class Foo A xs List A def map B f A gt B Foo xs map f def flatMap B f A gt Foo B Foo xs flatMap f andThen
  • 使用 App Engine SDK 进行并行模块部署

    TL DR 有没有办法并行部署 App Engine 模块 我使用 Google 构建了一个 go 应用程序适用于 Go 的 App Engine SDK https cloud google com appengine downloads
  • Async Await 等待所有结果并继续

    我对如何实现异步等待方法并在继续之前等待结果有点困惑 我想并行对后端进行 3 次调用 并等待它们响应 然后获取结果并在内部分配它们 像这样的事情 Private Sub GetParseExpressionResults If Not is
  • iOS Core Data:将获取请求的结果转换为数组

    我正在尝试将获取请求的结果放入数组中 我的代码 let appDelegate UIApplication sharedApplication delegate as AppDelegate let managedContext appDe
  • 在 PostgreSQL 中提取 xml 标签的值

    下面是我的 Postgres 表的列响应 我想从 Postgres 数据库中的所有行中提取状态 状态的大小可能不同 例如SUCCESS所以我不想使用子字符串函数 有办法做到吗
  • 实时显示 Google Analytics 数据

    我想显示自本月初以来网站上的访问者数量 当天和当前在网站上的用户数量 我安装了 Google Analytics 我尝试通过从开发人员控制台启用 Google Analytics API 来使用嵌入 API 来解决此问题 但我需要用户授权等
  • ES6模块的“导入”正式兼容CommonJS和AMD?

    从这篇文章 https hacks mozilla org 2015 08 es6 in deep modules https hacks mozilla org 2015 08 es6 in depth modules 文中写道 新标准旨
  • iPhone如何自动插入小数位?

    我知道过去曾多次问过这个问题 但我尝试的一切都失败了 我有一个带有 UILabel 的自定义数字键盘 当我点击 1 时 UILabel 显示一个 1 现在这就是我想做的 当我点击 1 按钮时 我想要 UILabel 中的 0 01 接下来是
  • 这是什么意思? “解析错误:语法错误,意外的 T_PAAMAYIM_NEKUDOTAYIM”

    T PAAMAYIM NEKUDOTAYIM 听起来确实很异国情调 但对我来说绝对是胡说八道 我将其全部追溯到这行代码 在构造函数中我创建了一个 Config 对象 这是课程 final c
  • 单例中的 Spring Prototype 作用域 bean

    我正在尝试注入prototype豆子在一个singleton这样 每次对单例 bean 方法的新调用都会有一个原型 bean 的新实例 考虑一个单例 bean 如下所示 Component public class SingletonBea
  • 停止正在运行的 SKAction - Sprite Kit

    以下代码将为旋转设置动画 let something SKSpriteNode SKSpriteNode func start let rotateAction SKAction rotateToAngle CGFloat M PI dur
  • if 与条件条件相比的速度

    我的想法是使用条件运算符将一些 if 块转换为单行 不过我想知道是否会有速度差异 我进行了以下测试 static long startTime static long elapsedTime static String s public s
  • 在合金模型中使用布尔值的最佳实践

    我正在构建一个简单的 Alloy 来生成简单的 Java Pojo 对象 并且该 pojo 的某些字段是布尔值 我现在使用以下机制来实现这个功能 one sig item autoPay String Price Int fact bool
  • Visual Studio 调试模式下显示奇怪的内存内容

    我正在编写一些多线程C 程序 我尝试修改函数体开头的几条指令 以将执行重定向到其他地方 但我注意到 在 Visual Studio 2015 中调试时 某些内存位置似乎是不可更改的 如Memory window 例如 下图中有一个函数ApS
  • 窗口关闭时销毁会话?

    我在 php 中创建了一个具有注销功能等的登录系统 但是我需要在窗口关闭时销毁会话 这需要 即时 或尽快将用户状态更改为离线 我真的不想在会话上设置时间 因为这对于必须一直登录的用户来说很烦人 欢迎任何建议 谢谢 默认情况下 当浏览器关闭时
  • 基于数组的双端队列实现

    我正在关注一个在线示例并学习 使用数组在 Java 中实现循环双端队列 这是我正在关注的在线资源 循环队列实现 http oppansource com queue implementation in java using circular
  • 如何管理 R 包中的数据库连接

    我正在构建一个 R 包 其主要目的是消除处理专有数据库的痛苦 该数据库需要一些相当复杂的 SQL 查询才能获取数据 因此 与 Microsoft SQL Server 的连接 通过以下方式获得 odbcDriverConnect 是这个包的
  • mkdir():Laravel 权限被拒绝

    我正在服务器中运行以下脚本来上传图像 并在本地主机上完美运行时收到以下错误 Code user id Auth id logicpath userdp user id pubpath userdp user id dpFile path u
  • 如何使用框架创建有效的 HTML5?

    对于学校 我必须制作一个网站must使用框架 我向老师投诉没有成功 我想使用 HTML5 但似乎框架已被弃用 我是否需要使用 XHTML HTML 4 或者是否有一些解决方法可以使我的页面通过使用框架而成为有效的 HTML5 我知道你的课已
  • 如何对套件中的所有测试用例应用 JUnit @Rule

    我正在使用 JUnit 4 10 来运行测试套件 并且按照 Matthew Farwell 在如何立即重新运行失败的 JUnit 测试 https stackoverflow com questions 8295100 how to re