Я должен не согласиться со статьей о характере применяемых методов тестирования. В решении используется шлюз, чтобы проверить, должен ли тест пройти успешно или не на промежуточной стадии.
На мой взгляд, лучше использовать Защитные утверждения , особенно для таких тестов (при условии, что тест не окажется многословным и сложным, что само по себе является анти-паттерном). ). Использование защитных утверждений вынуждает вас создавать SUT одним из следующих способов:
- разработать сам метод, чтобы в результате было достаточно информации о том, успешно ли выполнен вызов. Иногда это невозможно сделать, так как намерение дизайнера - не возвращать результат, а вместо этого выдать исключение (это может быть обработано во втором случае).
- спроектируйте SUT таким образом, чтобы его состояние можно было проверять после каждого значимого вызова метода.
Но прежде чем мы рассмотрим вышеупомянутые возможности, еще раз взглянем на следующий фрагмент:
plane.bookAllSeats();
plane.bookPlane(createValidItinerary(), null);
Если целью является тестирование bookPlane () и проверка выполнения этого метода, лучше иметь bookAllSeats () в фиксаторе. В моем понимании, вызов bookAllSeats () эквивалентен настройке SUT, чтобы гарантировать, что вызов bookPlane () завершится неудачно, и, следовательно, наличие приспособления для выполнения того же самого будет способствовать более читабельному тесту. Если намерения различны, я бы рекомендовал проверять состояние после каждого перехода (как я обычно делал бы в функциональных тестах), чтобы помочь точно определить первоначальную причину сбоя.