LINQ не запрещает использование хранимых процедур. Я использовал смешанный режим с LINQ-SQL и LINQ-storedproc. Лично, я рад, что не должен писать сохраненный procs.... pwet-tu.
Огурец используется для объяснения (создания описания) части (истории) приложения, а не для юнит-тестов или тестов поведения (которые находятся в центре внимания RSpec)
Итак, IMHO Огуречные тесты (истории) не заменяют тесты RSpec.
Тесты RSpec имеют тенденцию стимулировать разработку моделей и контроллеров, а истории имеют тенденцию стимулировать разработку представлений.
Из вашего описания кажется, что вы использовать огурец как для проверки рассказов, так и для проверки поведения.
Возможно, будет полезно посмотреть скринкасты на BDDCasts.com . Они проведут вас через создание историй и спецификаций для приложения. Мне это действительно помогло. Также владею книгой rspec, но все равно запутался. Возможно, вы даже захотите просто проверить их источник на github.
Для меня это выглядит так:
Огурец, чтобы проверить, что увидит пользователь. (Тест полного стека)
Rspec для проверки всего остального. (Модель, контроллер)
Cucumber можно использовать для запуска практически любого кода, поэтому я думаю, что вы запутались. Но огурец не предоставляет других средств тестирования, таких как методы имитации и заглушки, которые делают модульное тестирование более конкретным.
Материал rspec на самом деле предназначен для обработки небольших фрагментов поведения и делает все очень дискретным. Если вы знакомы с модульным тестированием и фреймворками для этого, это должно иметь больше смысла.
Утилита огурца позволяет переводить высокоуровневые описания в набор действий верхнего уровня в системе.
Управление сеансом (идентификация клиента, обработка файлов 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 для проверки действия и модели моего контроллера.
Эта статья может дать вам некоторое представление: Когда нужно повторяться в тестах, а когда нет