Я думаю, что в некоторых случаях вы можете , а иногда даже вам приходится утверждать несколько вещей в одном методе теста, если ваш метод выполняет несколько изменений, которые вы должны проверить на разных уровнях/abstractions.
Например, когда вы тестируете метод, который добавляет элемент в объект, который его хранит, вы можете утверждать, что количество элементов, содержащихся в объекте, было увеличено на единицу, но вы также можете проверить, что новый элемент былправильно добавлено относительно его значений.
У вас есть два уровня / абстракции: объект, который содержит элемент, имеющий состояние "direct / core", и элементы, которые он содержит, которые имеют свои собственные состояния.
Разделив его на два утверждения, можно получить тест, который выглядит следующим образом:
@Test
public void addElt(){
foo.addElt(new Element("a name", "a role"));
assertThat(foo).extracting(Foo::getSize)
.contains(actualSize+1);
assertThat(foo.getLastElt()).extracting(Element::getName, Element::getRole)
.containsExactly(addedElt.getName(), addedElt.getRole());
}
Итак, зачем теперь пытаться соединить два утверждения, которые проверяют две разные вещи?
действительно приносят пользу для отладки вашего теста?
Я так не думаю.
Попытка утверждать изменения на двух уровнях абстракции в одном утверждении явно не имеет смысла: сложные и бесполезные шумы.
Если первое утверждение не выполнено:
assertThat(foo).extracting(Foo::getSize)
.contains(actualSize+1);
Это очень вероятно означает, что элемент не был добавлен.
Так что в этом случае выполнение второго утверждения:
assertThat(foo.getLastElt()).extracting(Element::getName, Element::getRole)
.containsExactly(addedElt.getName(), addedElt.getRole());
не даетсмысл, поскольку это, скорее всего, будет также ошибкой.
Разработчик, который выполняет тест на отказ, должен иметь только полезную информацию, а не шум, который может усложнить его решение.Таким образом, наличие отзыва о размере, который не соответствует ожидаемому, является именно тем, что вам нужно.
То, что я пытаюсь объяснить, верно для AssertJ, как и для любой среды тестирования.