2016-06-21 65 views
0

的说法,我看到了下面的代码片段在网上:秩序都JUnit和Hamcrest

enter image description here

正如所提到的,Junit的(预期,实际)和Hamcrest的参数顺序(实际,预期)是逆转。

我想知道背后的原因是什么?争论顺序对于Junit或Hamcrest真的很重要吗?如果有人不小心将错误的指令置于错误的顺序,它会影响结果吗?

+2

在junit的情况下,当测试用例会失败时,您会得到相反的消息,表示正在等待“abc”并得到“pqr”,实际上反之亦然。但实际上它没有任何区别。 – SMA

回答

1

很多是混乱的消失,当你意识到你需要使用assertThat。这个断言只是做所有其他人做的事情;它以一种更好的方式来实现它。

而且不,订单并不重要。最后,这是关于匹配两个值。如果这两个值是相同的,你不在乎。

唯一的问题:如果颠倒的价值观,然后修复损坏的测试可能更难 - 你应该更好地了解实际预期值之间的差异。

最后:使用assertThat时有一个简单的助手。它需要A(ctual),然后E(预期)。非常按字母顺序。

3

好吧,对于Hamcrest来说,类型实际上是不同的:左侧是Object,右侧是Matcher。

对于jUnit,区别仅在于“仅”语义 - 即在失败的情况下会得到误导性的断言消息。

Assertj(添加另一个例子)使用了流畅的界面风格:

assertThat(actual).isEqualTo(expected); 
assertThat(actual).isGreaterThan(expected); 
...