当前位置: 首页 > 知识库问答 >
问题:

您可以向AssertJ AssertThat添加自定义消息吗?

刁文光
2023-03-14

我们经常比较那些不是为了人类可读性而制作的对象,这些对象将具有随机的ID或UUID,并且不可能根据它们包含的数据来判断它们应该是什么。对于我们的代码库来说,这是一个不可避免的情况,可悲的是,它实现的目的之一是在其他服务之间映射数据,而不需要理解它是什么。

在JUnit中,AssertThate方法提供的版本在匹配器 参数之前带有字符串reason参数。这使得添加一个简短的调试字符串变得微不足道,从而揭示了一些问题,比如比较对人类应该意味着什么。

另一方面,AssertJ提供了大量不同的泛型静态assertthat方法,这些方法返回某种形式的接口Assert或其众多实现类之一。此接口不提供将自定义消息设置为包含故障的标准方式。

共有1个答案

裘臻
2023-03-14

以经典的方式,我在发布问题后不久就找到了我要找的东西。希望这将使下一个人更容易找到,而不必首先知道它叫什么。这个神奇的方法是名为AS的短名,它是AbstractAssert实现的另一个接口的一部分:Descriptable,而不是基本的Assert接口。

公共%S为(字符串说明、对象...args)

设置支持String.format(String,object...)语法的此对象的说明。
示例

try {
  // set a bad age to Mr Frodo which is really 33 years old.
  frodo.setAge(50);
  // you can specify a test description with as() method or describedAs(), it supports String format args
  assertThat(frodo.getAge()).as("check %s's age", frodo.getName()).isEqualTo(33);
} catch (AssertionError e) {
  assertThat(e).hasMessage("[check Frodo's age] expected:<[33]> but was:<[50]>");
}

我注意到问题中链接的自定义断言页中的FailWithMessage帮助器,从而发现了这一点。该方法的JavaDoc指出,它是受保护的,因此调用者不能使用它来设置自定义消息。但是,它确实提到了作为助手:

此外,此方法支持使用作为(String,object...)或用户使用overridingErrorMessage(String,object...)定义的重写错误消息集的任何描述。

...和overridingErrorMessage帮助器,它用提供的新字符串完全替换标准AssertJ预期的:...,但WAS:...消息。

 类似资料:
  • 问题内容: 我们有一个测试套件,主要使用带有Hamcrest匹配器的JUnit断言。我们的一个团队开始对AssertJ进行实验,并以其语法,灵活性和声明性给人留下了深刻的印象。JUnit提供的一项功能是我无法在AssertJ中找到与之等效的功能:添加自定义断言失败消息。 我们经常在比较不是为了人类可读性而制成的对象,这些对象将具有随机查找的Id或UUID,并且无法通过包含的数据来判断它们应该是什么

  • 我是springboot kafka的新手,我在这篇文章后面创建了一个例子。 https://www.codenotfound.com/spring-kafka-boot-example.html 我发现您可以将kafka元数据设置为标题,但这不符合我的目的。 我能做到这一点吗?如果可能的话,我很感激你能分享一个例子。

  • 问题内容: 有没有一种方法可以为查询对象创建自定义方法,以便您可以执行以下操作? 本质上在哪里 并能够过滤掉它吗? 问题答案: 您可以对基类进行子类化以添加自己的方法: 然后,您可以在创建会话时告诉SQLAlchemy使用此新查询类(此处的文档)。从您的代码看来,您可能正在使用Flask- SQLAlchemy,因此您可以按照以下步骤进行操作: 否则,您将参数直接传递给: 到目前为止,这个新的查询

  • 问题内容: 是否可以向HTML标记添加自定义属性,如下所示? 问题答案: 您可以修改!DOCTYPE声明(即DTD)以允许它,以便[XML]文档仍然有效: 表示它是可选属性,或者您可以使用,等等。

  • 简介 此消息 用来接收 用户自定义TOPIC消息 发送过来的事件。 消息体 ChannelMessageBean 例子 Kotlin @Subscribe(threadMode = ThreadMode.MAIN) fun onReceiveCustomMessage(customEvent: ChannelMessageBean) { // TODO } ChannelMessageB

  • 是否可以在Visual Studio代码中自定义代码折叠的工作方式? 我使用一种通用模式来定义各种不同文档类型之间的代码区域。 > 所以,对于XML,我用和包装文本部分 对于typescript/JavaScript,我使用和。 在完整的Visual Studio(不是VS代码)中,我有一个自定义扩展,它可以窥探文档类型之间的模式,并基于该模式创建折叠,从而允许我创建整洁的自定义文档大纲。我希望在