В assertAll
интересно то, что он всегда проверяет все переданные ему утверждения, независимо от того, сколько из них завершилось ошибкой. Если все прошло, все в порядке - если хотя бы один не прошел, вы получите подробный результат всего, что пошло не так (и правильно в этом отношении).
Его лучше всего использовать для утверждения набора свойств, которые концептуально связаны друг с другом. Что-то, где ваш первый инстинкт был бы: «Я хочу утверждать это как единое целое».
Пример
Ваш конкретный пример не является оптимальным вариантом использования для assertAll
, потому что проверка isPrime
с простым и непростым числом не зависит друг от друга - настолько, что я бы рекомендовал написать для этого два метода тестирования.
Но предположим, что у вас есть простой класс, например адрес с полями city
, street
, number
, и вы хотите утверждать, что это то, что вы ожидаете от них:
Address address = unitUnderTest.methodUnderTest();
assertEquals("Redwood Shores", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());
Теперь, как только первое утверждение не сработает, вы никогда не увидите результатов второго, что может сильно раздражать. Есть много способов обойти это, и assertAll
JUnit Jupiter является одним из них:
Address address = unitUnderTest.methodUnderTest();
assertAll("Should return address of Oracle's headquarter",
() -> assertEquals("Redwood Shores", address.getCity()),
() -> assertEquals("Oracle Parkway", address.getStreet()),
() -> assertEquals("500", address.getNumber())
);
Если тестируемый метод возвращает неправильный адрес, вы получаете следующую ошибку:
org.opentest4j.MultipleFailuresError:
Should return address of Oracle's headquarter (3 failures)
expected: <Redwood Shores> but was: <Walldorf>
expected: <Oracle Parkway> but was: <Dietmar-Hopp-Allee>
expected: <500> but was: <16>
person
Nicolai Parlog
schedule
25.11.2016