JUnit 5 中的参数化 beforeEach/beforeAll

2024-04-27

我想为一个小型的类似数据库的应用程序编写一个测试。此应用程序使用查询,查询应返回正确的结果。这在 JUnit 5 中很容易实现,比如

@BeforeEach
void before() {
  database = prepareDatabase();
}

@Test
void testQuery1() {
  assertThat(database.query("query1")).isEqualTo("result1");
}

@Test
void testQuery2() {
  assertThat(database.query("query2")).isEqualTo("result2");
}

....

现在我想添加优化开关(例如查询优化器或数据库索引)。无论运行优化开关如何,查询都应该返回相同的结果(优化应该只改变效率而不改变结果)。

对于测试,这意味着我想为稍微其他的实现运行相同的方法prepareDatabase()(例如,一种带有优化器,一种带有索引,一种什么都没有)。

我还没有找到合适的扩展。我考虑为每个优化设置复制整个类或提供共享父类的方法。但这感觉不像是 JUnit 5 执行此任务的方式。也许有人可以向我指出一个可以帮助我解决这个问题的功能?


与往常一样,有多种可能的方法可以实现您的目标。其中之一是使用 Java 继承。您甚至不需要连接任何高级 JUnit 5 功能,只需连接旧的 Java 概念即可。

使用您的方法和抽象的prepareDatabase() 创建抽象类。

public abstract class QueryTest {

    Database database;

    @BeforeEach
    void before() {
        database = prepareDatabase();
    }

    @Test
    void testQuery1() {
        assertThat(database.query("query1"), is("result1"));
    }

    @Test
    void testQuery2() {
        assertThat(database.query("query2"), is("result2"));
    }

    abstract Database prepareDatabase();

}

然后 - 基于不同的变体,创建实现,仅重写此方法。

public class SwitchTrueQueryTest extends QueryTest {

    @Override
    Database prepareDatabase() {
        return new Database(true);
    }

}

public class SwitchFalseQueryTest extends QueryTest {

    @Override
    Database prepareDatabase() {
        return new Database(false);
    }

}

就是这样。没有什么是必要的,可重用的测试在父类中,不需要重复。

报告示例 https://i.stack.imgur.com/ATGZl.png

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

JUnit 5 中的参数化 beforeEach/beforeAll 的相关文章

  • 编译错误:表达式非法开始

    我正在学习 Java 游戏方面 我买了一本书 里面有一些代码 我尝试复制并测试它 唯一的问题是 当我尝试编译它时 它会出现错误 C Users James Desktop Java gt Javac GamePanel java GameP
  • ModelMapper:匹配多个源属性层次结构

    我无法解决 modelMapper 错误 您知道问题出在哪里吗 注意 鉴于 java sql Time 没有无参构造函数 我没有找到比编写转换器更好的方法 org modelmapper ConfigurationException Mod
  • Spring MVC 3 中的表单提交 - 说明

    我在理解 Spring 3 MVC 中的表单提交如何工作时遇到问题 我想做的是创建一个控制器 它将获取用户的名字并将其显示给他 不知怎的 我已经做到了 但我不太明白它是如何工作的 所以 我有一个看起来像这样的表格
  • IntelliJ IDEA 中的自动错误检测

    我是 Java 编程语言和 IntelliJ IDEA 2017 1 IDE 的新手 我刚刚安装了 IDE 并激活了所有各种检查 但每当我犯了错误 例如省略括号或分号 时 IDE 都无法检测到错误 此图像显示激活的检查 This is a
  • Single.zip - 如何捕获失败的呼叫并继续其余的网络呼叫?

    我正在进行 5 个并行网络调用 模拟其中 4 个成功 其中 1 个失败 失败的调用使整个Single zip 失败 即使其他 4 个网络调用成功 我也无法获得它们的结果 如何处理单个失败的网络调用的错误Single zip 并获得成功者的结
  • 关键词是真还是假?

    Are true and falseJava 中的关键字 这是完整的列表Java 语言关键字 http java sun com docs books tutorial java nutsandbolts keywords html 特别要
  • 创建另一个进程的 HWND 的子窗口? (例如屏幕保护程序预览)

    我正在用 Java 编写一个屏幕保护程序 它主要适用于 Windows 但我更希望它尽可能便携且实用 根据http support microsoft com kb 182383 http support microsoft com kb
  • 如何保护 Hibernate QBE 查询的安全

    目前 我知道四种使用 hibernate 进行事务处理的方式 使用对象 使用HQL 使用特定于数据库的 SQL 使用标准 QBE 好吧 关于它们对注射的抵抗力有多强 我认为是这些 如果我错了 请纠正我 安全 因为内部 SQL 调用是参数化的
  • 如何关闭 Grizzly 日志记录?

    如何关闭 Grizzly 的日志记录 我想关闭以下日志记录 Okt 18 2018 8 42 24 AM org glassfish grizzly http server NetworkListener start INFORMATION
  • Java中的引用变量到底是什么?它与其他变量有何不同?

    我一直在研究 Java 中的继承 作者声明 被引用的对象类型 而不是引用变量的类型 决定了将执行哪个版本的重写方法 这种说法非常令人困惑 这本书所指的是多态性 更具体地通过动态调度 简而言之 想象一下以下类 public class Per
  • jsoup 的奇怪编码行为

    我用jsoup从不同页面的html源代码中提取一些信息 大多数都是UTF 8编码的 其中一个是用 ISO 8859 1 编码的 这会导致一个奇怪的错误 在我看来 包含错误的页面是 http www gudi ch armbanduhr me
  • 无法解析符号“servlet”

    我有一个新手大问题 当我尝试以下操作时 servlet 变成红色并指示 无法解析符号 servlet import javax servlet http import javax servlet ServletException 我的 ap
  • 一个在 Java 中进行 URL 查询字符串操作的好库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要用 Java 进行一些非常简单的 URL 操作 就像获取查询中参数的值或更新它一样 我希望在 commons lang 包中找到一个
  • DateTimeFormatter 中的通配符

    我需要将一个字符串解析为LocalDate 该字符串看起来像31 03 2016用正则表达式术语 即 表示日期数字后可能有 0 个或多个未知字符 输入 输出示例 31xy 03 2016 gt 2016 03 31 我希望在 DateTim
  • 信任所有将文件发送到 https Web 服务的 java 类

    我需要编写自己的类来告诉 mule 与服务 wsdl 的 https 连接已验证 我的 mule 项目已经接近完成 但最后一块丢失了 在特定的 url 发送文件 我想要实现的目标 建立连接并将 xml 发送到目标 url 读取 xml 格式
  • 找不到元素“ehcache”的声明

    我正在我的 Web 应用程序中实现 url 缓存 运行时 ehcache xml 文件出现错误 我正在使用 spring 2 5 jar 文件 ehcache xml
  • Android,java - 无法从 asynctask 更新变量

    这是代码 声明的变量 public String gpu2dcurent 1234567 Asynctask 完成后应该更新变量 gpu2dcurent 但它没有 private class readgpu2d extends AsyncT
  • 如何在 JTextArea 中查找光标位置

    有人会帮我找到 JTextArea 中以像素为单位的光标位置吗 我用过txtArea getCaretPosition 但这不是我所期望的位置 实际上我想要光标位置在x y像素坐标 TextUI http download oracle c
  • 重写方法的返回类型可以不同吗?

    重写方法可以有不同的返回类型 Java supports covariant return types for overridden methods This means an overridden method may have a mo
  • 在 Transport.send(message) 上获取 ParseException

    由于某种原因 当我在 MimeMessage 上调用 Transport send 时 出现 javax mail internet ParseException 以前 当它只是一封纯文本电子邮件时 这是有效的 但是当我将其更改为同时包含文

随机推荐

  • 呈现模型与被动视图

    我想知道上述两种模式之间的区别 当您考虑到您需要在表示模型模式中同步代码并且该代码位于表示模型本身中时 那么我认为这些模式非常相似 两者都将事件委托给演示模型 演示者 演示模型和演示者命令域模型 并且也观察域模型 当发生更改时 它们都与视图
  • 推送通知不会弹出带有入门套件的react-native-firebase

    我已经克隆了React Native Firebase 启动器 https github com invertase react native firebase starter并进行了初始设置 然后根据文档重命名项目 然后添加google
  • Clojure/Java:用于声音频谱分析的 Java 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以接受大量音频数据并返回给定频带内随时间变化的平均幅度的库 我已经在 comp dsp
  • 如何将某些视图的自旋转限制为单一方向,同时允许其他视图的所有方向?

    这个问题是关于 iOS 设备旋转和 UINavigationController 中的多个受控视图 有些观点应该是仅限于纵向方向 有些应该自由自转 如果您尝试使用三个视图创建最简单的设置 您会注意到自动旋转行为有一些非常令人讨厌的怪癖 然而
  • 无法读取 null 和其他 null 变量的属性“appendChild”

    在开始之前 我想让您知道我对 Web 开发还很陌生 我还想保留这个 100 javascript 所以现在没有 jquery 或其他语言 以下代码源自该视频 https www youtube com watch v esa5hJegRfI
  • 验证 hh:mm:ss

    我是 C net 的新手 我想要验证仅采用 hh mm ss 格式的文本框 下面是我的代码及其工作原理 它给出的输出为 true 23 45 45 仅作为示例 对于 23 45 45 也为 true 仅作为示例 现在我想要验证 23 45
  • Groovy == 运算符

    到目前为止 我的理解是 是一个运算符重载 equals 然而我最近发现 new Integer 1 new Long 1 returns true whereas new Integer 1 equals new Long 1 return
  • 为什么我的 akka 日志记录不能在游戏中运行

    我的日志记录在我的播放代码中工作正常 但我的 akka 代码没有记录到文件 标准输出 class EmailActor extends Actor with ActorLogging import EmailActor log info e
  • 删除 PHP 中的标头

    为了允许缓存 PHP 生成的文件 我想确保 Pragma no cache 标头是not放 但是 如何删除可能已经设置的标头 这就对了could有可能 有人在代码中的某个地方写了header Pragma no cache 现在我想确保标头
  • 从 ISO8601 持续时间到时间以及从时间到 ISO8601 持续时间的转换

    我有 ISO8601 格式的持续时间值 并将其转换为整数秒数的时间值 如下所示 ISO8601 格式的持续时间值 P1Y duration ISO8601 Duration new params duration to seconds du
  • 使用高斯混合模型进行皮肤检测

    我正在根据以下进行皮肤检测算法本文 http www cc gatech edu rehg Papers SkinDetect IJCV lowres pdf 第 21 页有两个模型 高斯皮肤混合模型和非皮肤颜色模型 第一个皮肤检测模型效果
  • 在 Visual Studio 中为“将 JSON 粘贴为类”配置类和成员名称大小写(lowerCamelCase 与 UpperCamelCase)

    考虑这个 JSON firstName John lastName Doe homeAddress streetAddress 123 Main St city Boston state MA postalCode 02110 employ
  • 我如何在soapUI中循环发出具有不同内容的请求? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个方法作为soapUI 中的请求 它将数据传输到在线平台 我有不同的变量 每次都有不同的竞争 有没有办法让我每次都用不同的内容循
  • 有没有办法将类实例定义为 None ?

    例如 当我有这样一个Node类定义 class Node def init self val None next None self val val self next next def bool self return self val
  • .NET C# - MigraDoc - 如何更改文档字符集?

    我已经寻找过这个问题的解决方案 但仍然找不到答案 任何帮助 将不胜感激 Document document new Document Section section document AddSection Paragraph paragra
  • c++03 初始化具有多个参数的对象数组

    这可能是一个简单的问题 但我正在尝试使用参数化构造函数初始化对象数组 例如 class A public int b c d A int i int j void A A int i int j d rand b 2 i c 3 j voi
  • C# 中集合作为装饰器

    在设计集合基础设施时 我们遇到了一个非常 明显 的问题 假设您需要实现许多 子 类型的集合 其中一个方面是存储相关 list array等等 而另一个是行为相关 ordered 仅删除 可观察到的 每次更改时都会触发一个事件 等 显然 再次
  • Python中定义类变量时如何引用类方法?

    我有以下类和类变量 class MyClass class var 1 a class var 2 run class method classmethod def run class method cls return ran class
  • 不同屏幕尺寸下的VideoView

    我正在尝试插入适合不同尺寸屏幕的视频 我想要的是良好的分辨率并且不失真 我有两个适合大屏幕和小屏幕的视频 但我不知道如何插入它们 我认为这就像从可绘制文件 hdpi ldpi 等 中插入图像一样 您可以将图像添加到所需的分辨率文件夹中 但我
  • JUnit 5 中的参数化 beforeEach/beforeAll

    我想为一个小型的类似数据库的应用程序编写一个测试 此应用程序使用查询 查询应返回正确的结果 这在 JUnit 5 中很容易实现 比如 BeforeEach void before database prepareDatabase Test