Junit 和 Hamcrest 中的论证顺序
Order of argument in both Junit and Hamcrest
我在网上看到如下代码片段:
如前所述,Junit(expected, actual) 和 Hamcrest(actual, expected) 的参数顺序颠倒了。
我想知道这背后的原因是什么?参数顺序对 Junit 或 Hamcrest 真的很重要吗?如果有人不小心把参数放错了,会不会影响结果?
嗯,对于Hamcrest,类型其实是不同的:左边是Object,右边是Matcher。
对于 jUnit,区别在于 "only" 语义 - 即在失败的情况下您会收到误导性断言消息。
Assertj(再举一个例子)使用流畅的界面:
assertThat(actual).isEqualTo(expected);
assertThat(actual).isGreaterThan(expected);
...
当您意识到您仅 需要使用 assertThat 时,许多困惑就会消失。这个断言只是做所有其他人所做的事情;它以一种更好的方式做到了。
不,顺序并不重要。最后,这是关于匹配两个值。如果两个值相同,则无所谓。
唯一的问题:如果你反转值,那么修复损坏的测试可能会更难 - 因为你应该更好地理解实际和预期之间的区别 值。
最后:使用assertThat 时有一个简单的助手。它需要 A(实际),然后是 E(预期)。非常按字母顺序排列。
我在网上看到如下代码片段:
如前所述,Junit(expected, actual) 和 Hamcrest(actual, expected) 的参数顺序颠倒了。
我想知道这背后的原因是什么?参数顺序对 Junit 或 Hamcrest 真的很重要吗?如果有人不小心把参数放错了,会不会影响结果?
嗯,对于Hamcrest,类型其实是不同的:左边是Object,右边是Matcher。
对于 jUnit,区别在于 "only" 语义 - 即在失败的情况下您会收到误导性断言消息。
Assertj(再举一个例子)使用流畅的界面:
assertThat(actual).isEqualTo(expected);
assertThat(actual).isGreaterThan(expected);
...
当您意识到您仅 需要使用 assertThat 时,许多困惑就会消失。这个断言只是做所有其他人所做的事情;它以一种更好的方式做到了。
不,顺序并不重要。最后,这是关于匹配两个值。如果两个值相同,则无所谓。
唯一的问题:如果你反转值,那么修复损坏的测试可能会更难 - 因为你应该更好地理解实际和预期之间的区别 值。
最后:使用assertThat 时有一个简单的助手。它需要 A(实际),然后是 E(预期)。非常按字母顺序排列。