2016-06-21 3 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 типы на самом деле разные: левая сторона - объект, правая сторона - это Matcher.

Для jUnit разница - это только семантика «только» - т. Е. Вы получаете вводящее в заблуждение сообщение assert в случае отказа.

Assertj (добавить еще один пример) использует интерфейс свободно-стиль:

assertThat(actual).isEqualTo(expected); 
assertThat(actual).isGreaterThan(expected); 
... 
Смежные вопросы