java - 如何覆盖 google.Truth 中测试的默认失败消息?

标签 java google-truth

我正在编写一个测试,断言文档不包含特定字符串。当测试失败时,它会在表单中打印“实际”值

expected not to contain a match for: my_regex
but was                            : a huge document that is unreadable

文档很长。最好不要打印它,只打印文档的名称。我尝试了assertWithMessage(),但它只添加一条消息,而不是替换默认消息。

最佳答案

抱歉,我们偶尔考虑过提供此功能,但没有付诸实现。

对于初学者来说,它通常会使断言语句比您自己编写检查更长。比较:

assertThat(doc.matches(".*the-regex.*")).isTrue();

assertThat(doc).displayedAs("文档").containsMatch("the-regex");

(公平地说,在某些情况下,自己写支票并不那么容易。)

无论如何,Truth 的大部分目标是生成信息丰富的失败消息。如果人们有充分的理由忽略该信息,他们可以回退到 isTrue() 断言。

(再次公平地说,isTrue() 失败基本上不会产生任何有用的消息,而您希望“期望不包含以下内容的匹配项: my_regex。”你当然可以用 assertWithMessage 将其添加回来,正如你所说,但现在你的断言语句又变长了,如果你想在消息。)

(另外,能够始终以惯用的 Truth 方式编写断言,而不是在需要覆盖消息时切换到非惯用方式,这很好。)

不过,正如上面所有括号中所指出的,此功能有其用途。 “真正”的担忧主要是:

  • API 大小。还要考虑到有些人想要省略消息的不同部分,因此他们可能需要不止一种方法。
  • 人们可能会错误地调用此方法,从而意外地丢弃信息。

这里有一个相关的功能请求,即Truth在一定长度后截断值。实际上,我们已经收到了关于我们截断情况的反馈,因此我们需要在这里取得平衡:)但我们提供某种可配置的限制似乎是合理的,也许基于系统属性。我邀请您file an issue (还有一个关于“覆盖默认失败消息”的事情,如果你愿意的话,即使我怀疑我们不会这样做),尽管我应该警告你,接下来的一两个季度可能不会看到太多真理发展。

关于java - 如何覆盖 google.Truth 中测试的默认失败消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55007534/

相关文章:

java - neo4j 中的节点级安全性

java - 如何让文本字段和标签位于 7x3 网格中?

java - 使用 LWJGL 和 PNGDecoder 加载纹理时天空盒呈现黑色

java - 如何使用标点符号从状态存储中删除旧记录? (卡夫卡)

java - log4j异常处理

android - androidTestImplementation Google Truth 1.0 和实现 Google Guava 27.0.1 无法满足的版本约束

Android X + Truth + Guava 测试编译问题

java - 如何检查 Collection 是否至少包含 google-truth 中的 N 个匹配元素?

java - 如何修复测试依赖项中的拆分包?