2010-06-25 4 views
6

Я начинаю покупать в BDD. В принципе, как я понимаю, вы пишете сценарий, который описывает критерии приемлемости для определенной истории. Вы начинаете с простых тестов, извне, используя mocks вместо классов, которые вы еще не реализуете. По мере того, как вы прогрессируете, вы должны заменить mocks на реальные классы. От Introduction to BDD:BDD и функциональные тесты

Во-первых, фрагменты реализованы с использованием издевается установить счет, чтобы быть в кредит или карту, чтобы быть действительным. Они образуют начальные точек для реализации поведения. Как вы реализуете приложения, то данность и результаты изменяются использовать фактические классы, которые вы осуществили , так что к тому времени, когда сценарий завершен, они стали соответствующими впритык функциональными тестов.

Мой вопрос: когда вы закончите реализацию сценария, должны ли все классы, которые вы используете, быть реальными, например, в тестах интеграции? Например, если вы используете БД, должен ли ваш код записываться в реальную (но легкую в памяти) БД? В конце концов, должны ли вы иметь какие-либо издевки в ваших сквозных тестах?

ответ

3

Ну, это зависит :-) Как я понимаю, тесты, производимые BDD, все еще являются модульными тестами, поэтому вы должны использовать mocks для исключения зависимости от внешних факторов, таких как DB.

В случае полномасштабных тестов интеграции/функциональности, вы должны, очевидно, протестировать всю производственную систему без каких-либо издевок.

2

Тесты интеграции могут содержать заглушки/макеты для подделки кода/компонентов вне модулей, которые вы интегрируете.

Однако, ИМХО, сквозной тест должен означать отсутствие заглушек/издевок по пути, но только производственный код. Или, другими словами, если присутствуют макеты, это не совсем сквозной тест.

0

Я согласен с Питером и ratkok. Я думаю, что вы держите насмешки навсегда, поэтому у вас всегда есть модульные тесты.

Отдельно следует дополнительно провести интеграционные тесты (без издевок, использовать БД и т. Д.).

Вы можете даже иногда находить полезные ответы (издевательствовать один кусок зависимого кода (DOC), но не другой).

0

Я только недавно изучал BDD и, в частности, jBehave. Я работаю на довольно крупных предприятиях с большим количеством водопада, ориентированных на людей. Я рассматриваю BDD как способ использования дел в бизнесе и затем сразу же перехожу к тестам, которые разработчик может затем включить либо в тестовые тесты, либо в интеграционные тесты.

BDD, по-моему, не просто способ помочь разработчикам понять, что хочет бизнес, но и сделать так, чтобы гарантировать, что эти требования точно представлены.

Мое мнение, что если вы имеете дело с mocks, то вы делаете модульные тесты. Вам нужно как модульное тестирование, чтобы проверить детали работы классов, так и интеграцию, чтобы проверить, что класс хорошо работает с другими. Я нахожу, что разработчики часто завязываются между ними, но лучше всего быть настолько ясными, насколько это возможно, и держать их отдельно друг от друга.

2

Да, к моменту запуска сценария, в идеале все ваши классы будут реальными. Сценарий реализует поведение с точки зрения пользователя, поэтому система должна быть такой, какой видит пользователь.

В ранние дни BDD мы использовали, чтобы начать с mocks в сценариях. Я больше не беспокоюсь об этом, потому что много работы, чтобы продолжать насмехаться, когда вы спускаетесь по уровням. Вместо этого я иногда буду делать такие вещи, как данные или поведение жесткого кода, если он позволит быстрее получить обратную связь от заинтересованных сторон.

Мы по-прежнему сохраняем притворство в модульных тестах.

Для таких вещей, как базы данных, вы можете использовать встроенную базу данных или что-то еще, что поможет вам быстрее получить обратную связь. В какой-то момент вы, вероятно, должны запускать свои сценарии в системе, максимально приближенной к производству. Если это слишком медленно, вы можете сделать это за одну ночь, а не как часть вашего регулярного цикла сборки.

Что касается того, что вы должны «делать», писать правильный код гораздо сложнее, чем писать код справа. Я беспокоюсь о том, чтобы использовать мои сценарии, чтобы получить обратную связь от заинтересованных сторон и пользователей, прежде чем я буду беспокоиться о том, насколько близка моя среда к производственной среде. Когда вы дойдете до того, что изменения разворачиваются каждые две недели, конечно, тогда вы, вероятно, хотите больше уверенности в том, что вы не вводите никаких ошибок.

Удачи вам!

Смежные вопросы