Статьи

AssertJ> Fest> Хамкрест

Ранее я писал в блоге о Hamcrest и использую его методы assertThat по сравнению с JSnit .

Однако я быстро открыл FEST Assertions и с радостью переключился на него. Он обеспечивает ту же улучшенную читаемость теста и улучшает сообщения об ошибках, что и Hamcrest, но имеет дополнительное преимущество, заключающееся в включении автозаполнения IDE, вместо того, чтобы выполнять поиск по пакетам и документам классов, чтобы найти правильное соответствие.

К сожалению, Fest, похоже, уже не активно развивается. Последний стабильный выпуск ветки 1.x , 1.4, был выпущен еще в 2011 году, а новая ветка 2.x никогда не выходила в стабильный выпуск и не имела фиксации с июня 2013 года.

Введите AssertJ

Assert J

AssertJ является ответвлением Fest Assert и, похоже, предоставляет все преимущества, а также множество новых функций .

Коллекции

Например, он имеет все изящные обработки коллекций, которые мне так понравились в Fest:

1
2
3
4
5
6
List<String> stringList = Lists.newArrayList("A", "B", "C");
 assertThat(stringList).contains("A"); //true
 assertThat(stringList).doesNotContain("D"); //true
 assertThat(stringList).containsOnly("A"); //false
 assertThat(stringList).containsExactly("A", "C", "B"); //false
 assertThat(stringList).containsExactly("A", "B", "C"); //true

Соберите все ошибки до сбоя

Он также имеет возможность перехватывать все сбои перед тем, как потерпеть неудачу. Например, приведенный выше пример потерпит неудачу как первое ошибочное предположение. Приведенный ниже пример позволяет увидеть все ошибочные утверждения:

1
2
3
4
5
6
7
8
List<String> stringList = Lists.newArrayList("A", "B", "C");
 SoftAssertions softly = new SoftAssertions();
 softly.assertThat(stringList).contains("A"); //true
 softly.assertThat(stringList).containsOnly("A"); //false
 softly.assertThat(stringList).containsExactly("A", "C", "B"); //false
 softly.assertThat(stringList).containsExactly("A", "B", "C"); //true
 // Don't forget to call SoftAssertions global verification!
 softly.assertAll();

И приводит к сообщению, как это:

01
02
03
04
05
06
07
08
09
10
The following 2 assertions failed:
1)
Expecting:
 <["A", "B", "C"]>
to contain only:
 <["A"]>
elements not found:
 <[]>
and elements not expected:
 <["B", "C"]>
1
2
3
4
5
2)
Actual and expected have the same elements but not in the same order, at index 1 actual element was:
 <"B">
whereas expected element was:
 <"C">

Определенно стоит посмотреть. Код ядра AssertJ и система отслеживания ошибок размещаются на github.

Ссылка: AssertJ> Fest> Hamcrest от нашего партнера JCG