我们有一个测试套件,主要使用带有Hamcrest匹配器的JUnit断言。我们的一个团队开始对AssertJ进行实验,并以其语法,灵活性和声明性给人留下了深刻的印象。JUnit提供的一项功能是我无法在AssertJ中找到与之等效的功能:添加自定义断言失败消息。
我们经常在比较不是为了人类可读性而制成的对象,这些对象将具有随机寻找的Id或UUID,并且无法通过包含的数据来判断它们应该是什么。不幸的是,对于我们的代码库来说,这是不可避免的情况,因为它实现的目的之一就是在其他服务之间映射数据而不必了解它是什么。
在JUnit中,该assertThat
方法在String reason
参数之前提供一个带有参数的版本Matcher<T>
。这使得添加简短的调试字符串变得轻而易举,从而避免了对该问题的一些了解,例如,比较对人类意味着什么。
另一方面,AssertJ提供了十亿种不同的通用static assertThat
方法,这些方法返回某种形式的接口Assert或其许多实现类之一。此接口不提供设置失败时包括的自定义消息的标准方法。
有什么方法可以从AssertJ API或其扩展之一中获得此功能,而不必为要向其添加消息的每个断言类型创建自定义断言类?
withFailMessage
事项的顺序;我喜欢AssertJ,但这很糟糕。