JUnit 5 - 为整个测试套件提供设置和拆卸

2024-02-24

我的要求是为一组测试完成一些初始化,并在所有测试完成后将其清除。这些测试涉及一些测试类,因为它们并不密切相关,但需要共同的初始化。

我在用@SelectClasses形成套件并尝试利用@ExtendWith使用应该处理预处理和后处理的自定义扩展。这不起作用,我不确定 JUnit 中是否存在适当的解决方案。分享已经尝试过的示例代码。

Suite:

@SelectClasses({FirstTest.class, SecondTest.class})
@ExtendWith(SuiteExtension.class)
@RunWith(JUnitPlatform.class)
@SuiteDisplayName("test suite")
public class SuiteClass {
}

扩大:

public class SuiteExtension implements BeforeAllCallback, AfterAllCallback {

    @Override
    public void afterAll(ExtensionContext context) throws Exception {
        System.out.println("afterAll");
    }

    @Override
    public void beforeAll(ExtensionContext context) throws Exception {
        System.out.println("beforeAll");
    }
}

测试1级:

public class FirstTest {

    @Test
    void test1(){
        System.out.println("test1");
    }
}

测试2级:

public class SecondTest {

    @Test
    void test2(){
        System.out.println("test2");
    }
}

Output:

test1
test2

预期输出:

beforeAll
test1
test2
afterAll

组合@RunWith(来自 JUnit 4)和@ExtendWith(来自 JUnit Jupiter)不受支持:这些是来自两个不同框架的扩展机制。

从技术上来说,你的SuiteClass是 JUnit 4 测试类。因此,JUnit Jupiter 不会为其注册或执行任何扩展。

关于suites在 JUnit 5 中,我们(JUnit 团队)计划为不需要 JUnit 4 的套件提供一流的支持Runner (i.e., @RunWith(JUnitPlatform.class))。查看全部标有“套件”的 GitHub 问题 https://github.com/junit-team/junit5/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22theme%3A%20suites%22了解详情。请随意观看和/或评论任何这些问题。

在此期间,我相信在 JUnit Jupiter 中实现“套件前后”支持最接近的方法是实现一个自定义扩展,该扩展实现BeforeAllCallback and AfterAllCallback。该扩展需要通过在root ExtensionContext Store (as a BeforeAllCallback),这样它只执行once在“套房”之前。类似地,它需要计算它所执行的类的数量并在root Store。这将作为Stack or CountDownLatch. As an AfterAllCallback,扩展需要减少全局计数器并且仅execute所有测试课程完成后。

显然,您需要确保为属于该套件的每个测试类注册您的套件扩展。也许自定义组合注释可以简化您的问题。

现在,不可否认,我只是实施的在我的脑海中,但尚未实际编写这样的“套件”扩展。因此,如果您实际实现它,我有兴趣了解您的经验并可能看到您的代码。 ;-)

Cheers,

Sam(JUnit 5 的核心提交者)

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

JUnit 5 - 为整个测试套件提供设置和拆卸 的相关文章

  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

    我是 Java 正则表达式工具的新手 尽管它们潜力巨大 但我很难完成这项任务 我想编写一个正则表达式来验证遵循以下语法的输入字符串 小写字母和数字的任意组合 仅一个下划线 一个破折号或一个句号 无其他特殊字符 最小长度为 5 我想出了以下解
  • 如何拦截 REST 端点以接收所有标头?

    我当前的代码是 Path login RequestScoped public class LoginResource GET SecurityChecked public Response getUser HeaderParam AUTH
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • Intellij 中的 Google OR-Tools:UnsatisfiedLinkError

    我正在建立一个应该使用 Google OR Tools 的 java 框架 下面的代码编译成功 但在运行时抛出异常 Exception in thread main java lang UnsatisfiedLinkError com go
  • 在 IntelliJ 中运行 Spring Boot 会导致 Unable to load 'javax.el.E​​xpressionFactory'

    我正在尝试运行一个简单的 Spring Boot 应用程序 该应用程序具有以下 Maven pom file
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 使用 secp256r1 曲线和 SHA256 算法生成 ECDSA 签名 - BouncyCastle

    我正在尝试使用带有 secp256r1 曲线 P256 的 ECDSA 和用于消息哈希的 SHA256 算法生成签名 我也在使用 Bouncy Castle 库 下面的代码 public class MyTest param args pu
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • C# 运行时错误:“DataGridViewComboBoxCell 值无效”

    我花了一天的大部分时间来解决这个问题 但解决方案仍然困扰着我 我的 Winform 应用程序包含一个DataGridView其中两列是ComboBox下拉列表 奇怪的是 DataGridView似乎填充正确 但在填充时或每当有鼠标悬停或看似
  • 仅运行 ansible playbook 中的一项任务和处理程序

    如何从 Ansible playbook 运行单个任务以及在该任务成功完成时收到通知的处理程序 同时跳过相关 playbook 中的所有其他任务 目前我执行以下操作 ansible playbook start at task task1
  • 在空手道和放心之间选择

    尝试在 Karate 框架和 Rest Assured 之间进行选择以实现 API 自动化 其中包括 Rest API 和 GraphQL 我们还可以增强框架来执行 UI 自动化 我经历了寻找的一般过程 Karate 是为 GraphQL
  • Google Drive API 进度条错误

    我编写了以下代码来将文件上传到我的 Google 云端硬盘帐户 它工作得很好 然后我尝试添加一些上传进度跟踪器 但遇到了一些问题 它可以工作 但进度几乎立即达到 100 远远早于上传完成 export async function uplo
  • 使用常量引用删除引用

    对于参数类 C 我希望始终获得 原始 类型 而不管指针 const 或引用修饰符如何 template
  • (gcloud.app.deploy) 错误响应:[13] 意外错误

    当我尝试将 Spring Boot 应用程序部署到谷歌云时 出现以下错误 gcloud app deploy Error Response 13 Unexpected Error 我正在使用 com google cloud tools a
  • 提交PHP后保留表单中的值

    我从控制器调用这些函数来获取表单和表单中的值 我的问题是 提交失败后如何保留表单中的值 我尝试过这样的事情
  • Apache Spark 在分区数量较少时内存不足

    我有一个Spark应用程序总是内存不足 集群有两个节点 RAM大约30G 输入数据大小大约几百GB 该应用程序是一个 Spark SQL 作业 它从 HDFS 读取数据并创建一个表并缓存它 然后执行一些 Spark SQL 查询并将结果写回
  • C libpcap API 提取 DNS 查询

    我正在尝试使用 libpcap api 从捕获的 DNS 数据包中提取 DNS 查询 但是我的结构一定有问题 在最后一次转换 使用结构问题 之后char name指针指向正确的地址 查询名称的开头 但它只包含 42 45 20 00 但应该
  • 向客户端发送数据(数据是一个有大原型的对象)

    想要更新一个使用迄今为止创建的所有聊天室列表登录的新客户端 假设我做了这样的事情 每次有人加入应用程序时 socket emit updateClient rooms rooms是一个对象 由许多组成room的实例Room对象本身很小 但有
  • 如何将数据导入rails?

    我有一个带有 User 类的 Rails 3 应用程序 以及一个我想要导入的制表符分隔的用户文件 如何在 Rails 控制台之外访问 Active Record 模型 以便我可以编写脚本来执行以下操作 require active reco
  • 叠加两个或多个位图以在 Picturebox 中显示 (C#)

    在我的 C 程序中 我有一个 Picturebox 我想在其中显示视频流 连续帧 我收到原始数据 然后将其转换为位图或图像 我可以一次显示一张图像 没有问题 重现视频流 现在我的问题是我想要合并 2 个或多个具有相同大小和 alpha 值
  • 如何使用 StAX XML 解析器捕获属性事件?

    我尝试使用 StAX XML 解析器解析 XML 文件 它给我START ELEMENT and END DOCUMENT事件但没有ATTRIBUTE事件 我怎样才能收到ATTRIBUTE使用 StAX 解析器的事件 My XML
  • 验证错误后,后续 ajax 请求从 UI 组件获取值,而不是从 Bean 获取值

    在我基于 JSF 2 的应用程序中 我有一个表单 其中包括 以及其他 UI 组件 一些复选框 在复选框上 我注册了 ajax 请求 在选中它们时会触发这些请求 ajax 请求实际上只会更新支持 bean 中另一个复选框的值 因此 另一个复选
  • 如何从 Jinja 2 模板获取当前变量列表?

    如果我像这样返回 Jinja2 模板 return render response home htm context 那么如何从模板中获取上下文中的变量列表 从技术上讲 由于上下文不是作为命名字典传递的 因此需要做一些工作才能从模板内部生成
  • H1 在左边,“按钮”在右边,垂直对齐

    我试图在一行上显示 与包含框左侧对齐的 H1 元素 几个 按钮 此处为 A 元素 与包含框的右侧对齐 都在同一基线上 是否可以用最少的标记 即没有换行元素 来做到这一点 而不必设置精确的高度 行高 边距顶部等 div h1 What a g
  • 通过 Visual Studio 2010 安装 .NET Framework 作为 ClickOnce 应用程序部署的一部分时出现错误代码 5100

    在 Visual Studio 2010 中 我已将应用程序设置为面向 NET Framework 版本 4 和 所有 CPU 由于我们的一些用户是 64 位 而其他用户是 32 位 我假设用户会选择 所有 CPU 那是对的吗 在特定用户的
  • 将 PHP 数组排序为列

    我有一个 mysql 表 其中包含以下字段 名称 年份 描述 我想按年份按顺序显示 但想按十年分成列 我的 PHP 技能相当薄弱 所以我只知道如何根据年份范围进行单独的查询
  • 为 UIButton 添加背景阴影

    如何给图片添加浅灰色阴影UIButton 我现在不想要一个方法来做到这一点 它应该是这样的 UIButton button1 button1 layer shadowOpacity 0 8 等等 但这不起作用 它只会在按钮内部添加阴影 但我
  • JUnit 5 - 为整个测试套件提供设置和拆卸

    我的要求是为一组测试完成一些初始化 并在所有测试完成后将其清除 这些测试涉及一些测试类 因为它们并不密切相关 但需要共同的初始化 我在用 SelectClasses形成套件并尝试利用 ExtendWith使用应该处理预处理和后处理的自定义扩