Добро пожаловать в модульное тестирование. Каждая тестовая функция должна тестировать один элемент или процесс (процесс представляет собой последовательность действий, которые может выполнить пользователь). (Это единица, и поэтому она называется «модульное тестирование».) Единственное время, когда у вас должно быть несколько утверждений в функции теста, это если часть теста зависит от успешности предыдущей части.
Я использую это для веб-страниц тестирования Selenium. Поэтому я могу утверждать, что нахожусь в нужном месте каждый раз, когда перехожу на новую страницу. Например, если я зайду на веб-страницу, затем войду в систему, а затем изменю свой профиль, я буду утверждать, что попал в нужное место, когда вошел в систему, потому что тест больше не будет иметь смысла, если мой вход не пройден. Это не позволяет мне получать дополнительные сообщения об ошибках, когда на самом деле была обнаружена только одна проблема.
С другой стороны, если у меня есть два отдельных процесса для тестирования, я не буду тестировать один, а затем продолжу тестировать другой в той же функции, потому что ошибка в первом процессе может скрыть любые проблемы во втором. Вместо этого я написал бы одну тестовую функцию для каждого процесса. (И если один процесс зависел от успеха другого, например, опубликовать что-либо на странице, а затем удалить сообщение, я бы использовал аннотацию @depends, чтобы предотвратить запуск второго теста в случае неудачи первого.)
Короче говоря, если ошибка первого утверждения не делает невозможным тестирование второго, тогда они должны быть в отдельных функциях. (Да, это может привести к избыточному коду. При модульном тестировании забудьте все, что вы узнали об устранении избыточного кода. Или создайте не тестовые функции и вызовите их из тестовых функций. Это может затруднить чтение модульных тестов, и, следовательно, сложнее обновляться, когда вносятся изменения в предмет испытаний.)
Я понимаю, что этому вопросу уже 2 года, но единственный ответ был не очень ясен о том, почему. Я надеюсь, что это поможет другим лучше понять юнит-тестирование.