2015-04-30 1 views
2

Я новичок в мире ASP.NET MVC 5 и SpecFlow. Я пытаюсь собрать простой пример для учебных целей. У меня есть проект ASP.NET MVC в одной сборке и определение SpecFlow в другом. Я пытаюсь избежать наличия базы данных в настройке, так как я пытаюсь сохранить этот легкий вес. То, что я хотел бы сделать, это иметь в памяти коллекцию объектов данных на сервере MVC, с которой я мог бы манипулировать из определений SpecFlow. То есть Я хочу, чтобы иметь поток, как это:Ввод данных в работу IISExpress от SpecFlow

(1) В SpecFlow я говорю что-то вроде

 
Given I have the following account data 
    | Id | Balance | 
    | abc | 123 | 

(2) Тогда я хотел бы, чтобы SpecFlow связывания, чтобы ввести новый объект учетной записи в входы памяти, которая выполняется в процессе IISExpress.

(3) Наконец, я хотел бы в SpecFlow требовать

 
Then when I view the account balance of 'abc' 
in the web browser I am shown a balance of '123' 

... связывание затем запустить WatiN получить IE, чтобы открыть правильный URL и анализировать результат.

То, что мне не хватает, - это способ ввода этих данных в исполняемый IISExpress. Я могу решить проблему путем жесткого кодирования некоторой конфигурации в приложении MVC, но это не решение динамического тестирования, которое я ищу. Любые советы с благодарностью получили!

ответ

1

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

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

Вам нужно будет,

  1. Сервер ASP.Net MVC, который обеспечивает ваш открытый интерфейс (с учетом использовании Waitin я взять на себя веб-сайт). Это тот бит, который у вас уже есть
  2. Способ настройки и запуска этого сервера ASP.Net MVC, чтобы он работал с вашим альтернативным хранилищем данных. Я видел, что они вызваны именами хостов, переменными окружения или аргументами запуска. У всех проблемы в долгосрочной перспективе, поэтому просто выбирайте любые костюмы для начала и повторного посещения, когда это проблема.
  3. Другой интерфейс (возможно, просто API и есть повод научиться разрабатывать JSON API в ASP.Net MVC) для обработки непроизводственных операций, гарантирующих правильное состояние вашего хранилища данных. Это может быть что-то мелкозернированное, что позволяет вам устанавливать учетные записи и балансы (что будет означать много вызовов в тестах, чтобы получить данные в требуемое состояние) или что-то гораздо более грубое (т. Е. Один вызов, который восстанавливает его до своего " известное "состояние).
  4. Способ разделения непроизводственных операций, чтобы они не были доступны в вашем конечном экземпляре. Вы привели пример счетов с балансами, просто представьте проблемы, если когда-нибудь кто-нибудь узнает, что они могут установить свой баланс на нужную им стоимость? Лично я бы нашел способ «компоновки» вашей системы, чтобы этот код даже не отправлялся в производственный домен, но если безопасность менее важна, вы можете просто найти способ ее обеспечить.
  5. Хотите, чтобы ваши тесты проходили параллельно, поскольку вы получаете больше от них, и им требуется больше времени для запуска? Вы думали о способе разделения параллельных потоков? Может быть, каждый тест получает свой собственный счет? Может быть, вы хотите запустить отдельный WebServer для каждого теста?

Теперь я прошу прощения, но я собираюсь рассказать вам о ваших решениях до сих пор. Выше мы имеем все проблемы с проверкой всех фронт-к-назад. Его можно использовать в Приемочные испытания, или как Регрессионное тестирование, но это действительно не очень полезно в обучении тому, как это сделать. SpecFlow работает лучше всего, когда вы думаете о бизнес-процессах. Итак, вам нужны ваши тесты, чтобы поговорить о веб-браузерах? (Вы быстро читать из Whose domain is it anyway?)

Что делать, если вместо того, чтобы вы писали

Then the account balance of 'abc' should be '123' 

Теперь вы абстрагируются интерфейс полностью, это Subcutaneous testing. Это позволит вам избежать необходимости запуска ваших тестов на веб-сервере, что даст вам гораздо более простые способы ввода ложного хранилища данных.

Вы также можете написать

When I click on 'Check Balance' 
Then it should call the 'CheckBalanceCommand' 

Это позволит вам проверить только ярус UI, и вы могли бы заменить слой Command с Mock -ED слоя, избежать все настройки хранилища данных.

На самом деле, вы можете даже рассмотреть архитектуру тестирования, такие как - UI -> Команды - Команды -> Бизнес-логика - Команды -> Хранение данных

Или вы можете просто попробовать весь лот впереди для некоторых больших тестов ole? :-)

+0

Спасибо AlSki за ** очень ** всеобъемлющий ответ. Все действующие пункты, которые я возьму на борт. Для моего вопроса в-малом, точка, которую я забираю, - это то, что мне нужно: «Еще один интерфейс ... [чтобы] гарантировать, что ваше хранилище данных имеет в нем правильное состояние». Я думаю, что я просто повернусь, чтобы это сделать. –

0

Это слишком сложно ради удаления базы данных. То, что вам действительно нужно сделать, - это установить локальную базу данных и настроить ваше веб-приложение для использования для ваших тестов.

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

  • Нет связанных вопросов^_^