У лучших практик всегда есть цель, причина за ними. Это всегда хорошая идея, чтобы учесть эти причины в своем дизайне, особенно когда вы пытаетесь решить, как и насколько сложно следовать этим лучшим практикам.
В этом случае главная причина создания каждого тестового теста - одна вещь, если первая не удалась, вторая не будет проверена. Поскольку слишком много лиц, формирующих общественное мнение, похоже, находят смысл разбивать все на мелкие биты и оборачивать каждый бит как можно большим количеством раздувания, это породило идею о том, что каждый тест должен содержать одно утверждение.
Не следуй этому вслепую. Даже если каждый тест должен проверять одну вещь, вы все равно должны подумать о том, какой большой или маленькой должна быть каждая «вещь», и для этого вы должны помнить, почему вы хотите, чтобы каждый тест проверял одну вещь - чтобы убедиться, ошибка в первой вещи не оставляет вторую вещь непроверенной.
Итак, вы должны спросить себя: «Мне действительно нужна эта гарантия здесь?»
Допустим, в первом тесте есть ошибка - код ответа HTTP - нет 200
. Итак, вы начинаете взламывать код, выяснять, почему вы не получили код ответа, который вы должны иметь, и устранять проблему. И что теперь?
- Если вы снова запустите тестирование вручную, чтобы убедиться, что ваше исправление действительно решило проблему, вы должны столкнуться с любой другой проблемой, скрытой при первом сбое.
- Если вы не запускаете его вручную (возможно, потому что это занимает слишком много времени?), А просто нажимаете на свое исправление, ожидая, пока сервер автоматических тестов запустит все, тогда вы можете поместить разные утверждения в разные тесты. Циклы в этом случае очень длинные, поэтому стоит приложить усилия, чтобы обнаружить как можно больше ошибок в каждом цикле.
Есть еще несколько вещей, чтобы рассмотреть:
Утверждения зависимостей
Я знаю, что тесты, которые вы описали, являются лишь примером, и ваши реальные тесты, вероятно, являются более сложными - поэтому то, что я собираюсь сказать, может оказаться недействительным с такой большой силой в реальных тестах, но все же может быть несколько эффективным, так что вы может захотеть рассмотреть это.
Если у вас есть служба REST (или любой другой протокол HTTP), который возвращает ответы в формате JSON, вы обычно пишете простой клиентский класс, который позволяет вам использовать методы REST, такие как обычные методы, которые возвращают обычные объекты. Если предположить, что у клиента есть отдельные тесты, чтобы убедиться, что он работает, я бы отбросил первые 3 утверждения и оставил только 4!
Почему?
- Первое утверждение является избыточным - класс клиента должен выдать исключение, если код ответа HTTP не равен 200.
- Второе утверждение является избыточным - если ответ пустой, результирующий объект будет нулевым или каким-либо другим представлением пустого объекта, и вам некуда будет вставлять ключ X.
- Третье утверждение является избыточным - если JSON недействителен, вы получите исключение при попытке его проанализировать.
Таким образом, вам не нужно запускать все эти тесты - просто запустите четвертый тест, и, если обнаружатся какие-либо ошибки, обнаруженные первыми тремя попытками, тест завершится неудачно с правильным исключением, прежде чем вы даже получите фактическое утверждение.
Как вы хотите получать отчеты?
Допустим, вы не получаете электронные письма с тестового сервера, но вместо этого отдел QA проводит тесты и уведомляет вас о неудачных тестах.
Джек из QA стучит в вашу дверь. Он говорит, что первый метод тестирования не удался, а метод REST вернул неверный код ответа. Вы благодарите его и начинаете искать основную причину.
Затем приходит Джен из QA и говорит, что третий метод тестирования не удался - метод REST не вернул допустимый JSON в теле ответа. Вы говорите ей, что вы уже просматриваете этот метод, и вы полагаете, что то же самое, что заставило его вернуть неверный код выхода, также заставило его вернуть что-то, что не является допустимым JSON и больше похоже на трассировку стека исключений.
Вы возвращаетесь к работе, но затем приходит Джим из QA, говоря, что четвертый метод теста не удался, и в ответе нет ключа X ...
Вы даже не можете найти причину, потому что трудно смотреть на код, когда у вас нет экрана компьютера. Если бы Джим был достаточно быстр, он мог бы вовремя уклониться ...
Электронные письма с тестового сервера легче отклонить, но все же - не лучше ли вам просто ОДНАЖДЫ раз сообщать , что что-то не так с методом теста, и самостоятельно просматривать соответствующие журналы тестов?