我在网上看到了下面的代码片段:
如前所述,Junit(期望值,实际值)和Hamcrest(实际值,期望值)的参数顺序颠倒了。我想知道这背后的原因是什么?参数顺序对Junit或Hamcrest真的很重要吗?如果有人不小心把参数顺序放错了,会影响结果吗?
mwngjboj1#
嗯,Hamcrest的类型实际上是不同的:左手侧是Object,右手侧是Matcher。对于JUnit,区别仅在于语义,也就是说,在失败的情况下,您会得到一个误导性的Assert消息。AssertJ(添加另一个示例)使用流畅风格的界面:
Object
Matcher
assertThat(actual).isEqualTo(expected); assertThat(actual).isGreaterThan(expected); ...
cnh2zyt32#
当你意识到你只需要使用assertThat时,很多困惑就消失了。而且它做得更好。不,顺序并不重要。最后,这是关于匹配两个值。如果两个值相同,你不在乎。唯一的问题是:如果您反转了值,那么修复损坏的测试可能会更困难-因为您应该更好地理解 * 实际 * 值和 * 预期 * 值之间的差异。最后:在使用assertThat时有一个简单的助手。它需要A(ctual),然后是E(expected)。非常按照字母顺序。
2条答案
按热度按时间mwngjboj1#
嗯,Hamcrest的类型实际上是不同的:左手侧是
Object
,右手侧是Matcher
。对于JUnit,区别仅在于语义,也就是说,在失败的情况下,您会得到一个误导性的Assert消息。
AssertJ(添加另一个示例)使用流畅风格的界面:
cnh2zyt32#
当你意识到你只需要使用assertThat时,很多困惑就消失了。而且它做得更好。
不,顺序并不重要。最后,这是关于匹配两个值。如果两个值相同,你不在乎。
唯一的问题是:如果您反转了值,那么修复损坏的测试可能会更困难-因为您应该更好地理解 * 实际 * 值和 * 预期 * 值之间的差异。
最后:在使用assertThat时有一个简单的助手。它需要A(ctual),然后是E(expected)。非常按照字母顺序。