Короткий ответ: вы не должны этого делать.
Огуречные тесты должны быть ориентированы на пользователя и читабельны. Они описывают особенности. Пользователю все равно, соответствует ли вывод ошибки некоторому известному значению байт за байтом.
Вы должны спросить себя: что я тестирую? Является ли ответ сообщением об ошибке? Возможно нет. Вы тестируете некоторые функции в своем приложении. Если все, что вы действительно хотите гарантировать, что это не сработает, то в сценарии Cucumber вам нужна следующая строка:
Then the exit status should not be 0
Это предполагает, что сценарий следует стандартному соглашению о том, что ненулевой статус выхода сигнализирует об ошибке.
Если ваш сценарий требует, чтобы на выходе было определенное сообщение, вы можете добавить его:
Then it should fail with
"""
Some error message
"""
но это не обязательно должен быть полный вывод, а только частичное совпадение. (Обратите внимание, что в aruba определено «это должно завершиться ошибкой точно:», но я не рекомендую его использовать.)
Редактировать: вы изменили свой пример, чтобы он тестировал успешно, а не неудачно, но мой основной совет остается прежним:
- Отделяйте специфику вывода от логики сценария. Используя пример в комментариях, если у вас есть тест, который подтверждает, что вы можете вывести один пользовательский комментарий, и другой тест, который подтверждает, что вы вывели правильные 100 комментариев, то этого достаточно, вы не нужно иметь вывод на 100 комментариев в сценарии Cucumber.
- Пишите сценарии Cucumber с точки зрения пользователя. Каждый сценарий должен тестировать что-то важное для пользователя. Старайтесь свести их к минимуму, удаляя все, что просачивается из реализации, когда пользователю все равно.
- Для этого используйте встроенные конструкции Aruba, которые проверяют частичные совпадения. Ищите ключевые слова или фразы в выводе. Мало того, что тесты Cucumber будут легче читать, они будут более надежными и невосприимчивыми к несвязанным изменениям вывода.
person
Mark Thomas
schedule
11.12.2012