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("the doc").containsMatch("the-regex");
(公平地说,在某些情况下,自己写支票并不容易。)
无论如何,Truth 的大部分目标是产生信息丰富的失败消息。如果人们有充分的理由忽略这些信息,他们可以退回到isTrue()
断言。
(再次公平地说,isTrue()
失败基本上不会产生有用的消息,而您希望“预期不包含匹配项:my_regex。”您当然可以将其添加回来assertWithMessage
,正如您所说,但现在你的断言语句又变长了,如果你想在消息中重复“my_regex”,你必须重复它。)
(另外,很高兴能够始终以惯用的 Truth 方式编写断言,而不是在您想要覆盖消息时切换到非惯用的方式。)
但是,正如上面所有括号中所指出的,此功能将有其用途。“真正”的担忧主要是:
- API 大小。还要考虑一些人想要省略消息的不同部分,因此他们可能需要不止一种方法。
- 人们可能会错误地调用此方法,不小心将信息丢弃。
这里有一个相关的特性请求,就是让 Truth 在一定长度后截断值。实际上,我们已经收到反馈抱怨我们确实截断的情况,所以我们需要在这里取得平衡:) 但是我们提供某种可配置的限制似乎是合理的,可能基于系统属性。我邀请你提交一个问题(如果你愿意的话,还有一个关于“覆盖默认失败消息”的问题,即使我怀疑我们不会这样做),尽管我应该警告你下一两个季度是可能不会看到很多真相发展。
推荐阅读
- azure - 使用 KQL 查询的 App Insights REST 调用返回空
- javascript - 我正在制作一个音乐应用程序,如何更新/计算播放
- blogger - 如何保持切换的共享按钮扩展并在 Blogger 主题版本 2017 中实际工作?
- postgresql - 无法在 Postgres 中计算 percentile_disc、percent_rank 的收入
- python-3.x - 无法在 python3 下安装 pycrypto(使用 pip3),但它在 python[2] 下并行安装
- c# - 在 vscode 中运行 .NET
- android - 为什么创建文本视图时在主要活动中无法识别?
- python - How to install setup.py at runtime
- java - How to trigger a service method to run only once in Spring boot
- memory-leaks - How to show object instance in Memory snapshot?