Я знаю, что одним из намерений Дэна Норта при разработке BDD было отодвинуть словарный запас от сложности тестовой области. Однако при реализации подхода «снаружи-внутрь», похоже, нам все еще требуется некоторое понимание имитационного поведения (или заглушенного поведения, если хотите). Норт предлагает в этом видео, что если я начну с самых внешних объектов домена и продвинусь внутрь, я издеваюсь соавторов, когда я их обнаруживаю и позже заменяю подходящими реализациями. В итоге я получаю набор сквозных тестов.
В этом сообщении в блоге Мартин Фаулер, похоже, определил два лагеря TDD: «классический TDD», который по возможности использует реальные объекты, а при необходимости - имитацию, а также "mockist TDD", который в большинстве ситуаций предпочитает имитировать. Он считал, что BDD склоняется к последнему. То есть, что в конце разработки функции подход «mockist» оставит имитацию в реальных тестах (извините за использование этого слова в обсуждении BDD).
Честно говоря, обоим материалам уже много лет, и, возможно, все стало проясняться по мере того, как BDD развивался по линии между применением на уровне единицы и уровнем принятия.
Но мой вопрос к сообществу сводится к следующему: когда моя история будет завершена, какой степени сквозного тестирования должны быть мои сценарии на самом деле? North объясняет, что BDD требует абстракций. Например, когда я тестирую поведение входа в систему, мои сценарии подробно описывают, что означает процесс входа в систему. Однако, когда я выполняю какой-либо другой сценарий, который требует, но не входа в систему, я не хочу повторять эти шаги снова и снова. Мне нужна простая абстракция, которая просто говорит: «Если я вошел в систему», чтобы я мог выполнить другое свое поведение.
Так что, похоже, мой подход к абстракции будет заключаться в том, что я высмеиваю некоторых соавторов (или предоставляю «тестового двойника»), и в некоторых сценариях они могут использоваться чаще, чем в других. Например, всегда ли я имитирую внешние ресурсы, такие как БД или почтовый сервер?
Возможно, я задаю неправильный вопрос. BDD - это общение, сокращение цикла обратной связи и обнаружение того, чего вы не знаете. Может быть, что-то-что-не-шутить - неуместный вопрос, если поведение, которое нас интересует, действительно работает. Мне любопытно, каковы здесь подходы других.