Я нашел много информации о плохих практиках, чтобы использовать несколько утверждений в одном методе (одно условие теста). Ясно. Каждый метод должен проверять одно и только одно условие. Поэтому в большинстве случаев это должно быть утвердительно.В одном утверждении утверждается несколько условий
Но я не могу найти никакой информации о передовом опыте ситуации, если мой один утверждает несколько условий.
Пример:
@Test
public void findAllPerformers_returnsPerformersInAlphabeticalOrder() {
List<String> performers = reportRepository.findAllPerformers();
assertThat("Should return performers in alphabetical order",
performers, contains("Bart Simpson", "Homer Simpson",
"Ned Flanders", "Xena Warrior Princess"));
}
Во-первых, я должен был иметь еще 2 методы испытаний (условия): findAllPerformers_returnsAllUniquePerformers
и findAllPerformers_returnsEachPerformerOnlyOnce
. Но потом я понял, что мой первый метод также проверяет эти два условия!
Итак, что мне делать?
- Оставьте все методы как есть.
- Удалите еще 2 метода испытаний и переименуйте мой метод
findAllPerformers_returnsPerformersInAlphabeticalOrder
в очень длинное название с учетом всех трех условий (потому что он действительно проверяет все три условия!) - Просто удалите еще 2 метода испытаний.
- Оставьте все методы, но вызовите метод
findAllPerformers_returnsPerformersInAlphabeticalOrder
из двух других методов. - Копирование-вставка
findAllPerformers_returnsPerformersInAlphabeticalOrder
содержание метода до двух других методов. - Что-нибудь еще ...
Я не вижу ничего плохого в модульном тесте, который проверяет более чем одну функциональность, при условии, что вы самостоятельно проверяете каждую функциональность отдельно. –
Итак, вы предлагаете «1. Оставьте все методы как есть».? – djxak
Один утверждать должен проверить одно условие. В противном случае вы не можете определить, из какого отказа. Однако я не понимаю, почему один метод не может проверить несколько условий с несколькими утверждениями, если они связаны. – EJP