Огурец направляющих TDD/BDD / дублирование RSpec

LINQ не запрещает использование хранимых процедур. Я использовал смешанный режим с LINQ-SQL и LINQ-storedproc. Лично, я рад, что не должен писать сохраненный procs.... pwet-tu.

12
задан Phil 9 November 2009 в 13:22
поделиться

5 ответов

Огурец используется для объяснения (создания описания) части (истории) приложения, а не для юнит-тестов или тестов поведения (которые находятся в центре внимания RSpec)

Итак, IMHO Огуречные тесты (истории) не заменяют тесты RSpec.

Тесты RSpec имеют тенденцию стимулировать разработку моделей и контроллеров, а истории имеют тенденцию стимулировать разработку представлений.

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

12
ответ дан 2 December 2019 в 03:54
поделиться

Возможно, будет полезно посмотреть скринкасты на BDDCasts.com . Они проведут вас через создание историй и спецификаций для приложения. Мне это действительно помогло. Также владею книгой rspec, но все равно запутался. Возможно, вы даже захотите просто проверить их источник на github.

Для меня это выглядит так:

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

  • Rspec для проверки всего остального. (Модель, контроллер)

13
ответ дан 2 December 2019 в 03:54
поделиться

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

Материал rspec на самом деле предназначен для обработки небольших фрагментов поведения и делает все очень дискретным. Если вы знакомы с модульным тестированием и фреймворками для этого, это должно иметь больше смысла.

Утилита огурца позволяет переводить высокоуровневые описания в набор действий верхнего уровня в системе.

2
ответ дан 2 December 2019 в 03:54
поделиться

Управление сеансом (идентификация клиента, обработка файлов cookie, сохранение данных области сеанса и т. Д.) В основном уже выполняется самим сервером приложений. Вам совсем не о чем беспокоиться. Вы можете просто установить / получить объекты Java в сеансе с помощью HttpSession # setAttribute () и #getAttribute () . Единственное, о чем вам действительно нужно позаботиться, - это перезапись URL в случае, если клиент не поддерживает файлы cookie. Затем к URL-адресу будет добавлен идентификатор jsessionid . В JSP для этого можно использовать JSTL c: url . В сервлете вы можете использовать для этого HttpServletResponse # encodeURL () . Таким образом, сервер сможет идентифицировать клиента, прочитав новый URL-адрес запроса.

Ваш новый вопрос, вероятно, будет следующим: " Но как файлы cookie связаны с этим? Как сервер все это делает? ". Ответ таков: если сервер получает запрос от клиента и код на стороне сервера (ваш код) пытается получить HttpSession по ] HttpServletRequest # getSession () пока еще никто не создан (первый запрос в новом сеансе), сервер сам создаст новый. Сервер сгенерирует длинный, уникальный и трудно угадываемый идентификатор ( тот, который вы можете получить с помощью HttpSession # getId () ) и установить этот идентификатор в качестве значения cookie с именем jsessionid . Под капотом сервер использует HttpServletResponse # addCookie () для этого.Наконец, сервер сохранит все сеансы в некотором виде Map с идентификатором сеанса в качестве ключа и значением HttpSession в качестве значения.

Согласно спецификации HTTP cookie , клиент должен отправлять те же файлы cookie обратно в заголовках последующего запроса. Под капотом сервер будет искать файл cookie jsessionid с помощью HttpServletRequest # getCookies () и определять его значение. Таким образом, сервер может получить связанный HttpSession и вернуть его при каждом вызове HttpServletRequest # getSession () .

Кстати: единственное, что хранится на стороне клиента - идентификатор сеанса (в виде файла cookie), а объект HttpSession (включая все его атрибуты) хранится на стороне сервера (в памяти Java). Вам не нужно беспокоиться об управлении сеансом самостоятельно, и вам также не нужно беспокоиться о безопасности.

См. Также: Ведь действительно можно было бы прекратить дублирование тестов, и это было бы бесполезно, не так ли? :)

Есть разные подходы к Cucumber.

С Cucumber вы можете:

DMA (прямой доступ к модели, да, вы можете полностью протестировать свою модель, как в rspec)

Имитация браузера (доступ ко всему стеку MVC, без javascript)

Автоматический браузер (используйте webrat и selenium для доступа к вашим представлениям, с javascript, более медленным, настоящим браузером)

Мне нравится используйте огурец, чтобы проверить, что возвращается пользователю. Обычно это имеет для меня смысл, когда я определяю свои истории, поскольку я действительно не имею в виду код, который собираюсь написать. Итак, я тестирую окончательный результат с помощью Cucumber -> представлений (с использованием смоделированного или автоматического браузера)

Затем я использую rspec для проверки любого кода, который я пишу в контроллерах и моделях.

Таким образом, в вашем случае,

Когда пользователь вводит неверный номер телефона, а затем получает сообщение «Недействительный номер телефона»

. Я бы использовал Webrat, чтобы проверить, что пользователь получает сообщение Недействительный номер телефона в представлении. Я бы использовал Rspec для проверки действия и модели моего контроллера.

5
ответ дан 2 December 2019 в 03:54
поделиться

Эта статья может дать вам некоторое представление: Когда нужно повторяться в тестах, а когда нет

0
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: