BDD и ASP.NET MVC - В поисках шоссе - PullRequest
1 голос
/ 28 сентября 2011

Примерно полгода назад я начал копаться в модульном тестировании. Я пробился в TDD (или как я думал) и теперь я хочу разработать приложение MVC, ориентированное на поведение. Концепция приемочных испытаний (реальных сквозных) является новой для меня, поскольку мой последний проект не выполнялся в среде приемочных испытаний.

Я начал с прочтения некоторых хороших статей, в частности http://blog.stevensanderson.com/2010/03/03/behavior-driven-development-bdd-with-specflow-and-aspnet-mvc/ Сандерсона, и подкрепляю свои навыки MVC, читая его книгу на эту тему.

Я использую SpecFlow и SimpleBrowser для сквозного тестирования. Управлять навигацией через панель навигации было легко, но я застрял. Я стремлюсь реализовать учетные записи пользователей для дальнейшего создания статей и комментариев. Вождение в процессе регистрации доставило мне головную боль. Учитывая этот файл функции:

Feature: User accounts
    In order to customize and influence page content
    As a user
    I want to able to create an own user account

Scenario: Create a user
    Given  I am on the /Account/Create page
    When I fill out the registration formular as follows
    | NickName | EmailAddress                 |
    | test123  | test.address@test-server.com |
    And I click the "Create" button
    And I clicked the link in the authentication mail
    Then I should be on the root page
    And I should see the message "Welcome test123!"

Я не могу понять, как обеспечить необходимую среду тестирования (почтовый сервер в этом примере) и сделать тест менее хрупким (подумайте о переименовании кнопки «Создать» в «Отправить»). Не говоря уже о переплетении в генераторе захвата, чтобы предотвратить автоматическое создание пользователя (о, ирония) в более позднее время. Может быть, я просто слишком много думаю впереди, чего на самом деле не следует делать в TDD, но иногда я просто смотрю на экран и думаю о своем следующем тесте.


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

  • Придерживайтесь тестов уровня UI и рефакторинг, если это необходимо для реализации логики захвата
  • Откат к тестированию уровня контроллера
  • Любой другой способ просветить меня на

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

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

Я использую SpecFlow для тестирования моего сервисного уровня.В ASP.net MVC это будет контроллер.Как вы упомянули, такого рода тестирование пользовательского интерфейса является очень хрупким, поэтому я использую его только при использовании некоторого расширенного пользовательского интерфейса JavaScript.

Таким образом, мой стек тестирования выглядит примерно так:

  1. NUnit тестирует более сложные алгоритмы в модели
  2. SpecFlow для тестирования контроллера.Это гарантирует, что представления получают то, что должны, и что модели взаимодействуют, как предполагалось.
  3. Тесты QUnit для моих моделей JavaScript, которые я использую в основном с Knockout JS (эти два выглядят так, как будто они созданы друг для друга)
  4. Ручные приемочные тесты (очень грубые и не слишком много), хорошо документированные
  5. Несколько (очень мало) автоматических тестов пользовательского интерфейса с WatiN для более продвинутых пользовательских интерфейсов

При этом около 75% написанных тестов относятся к пункту 2 (SpecFlow) и 15% к пункту 3 (QUnit).Мне кажется, это работает, но любые предложения тоже приветствуются.

1 голос
/ 31 октября 2011

Я бы не совмещал нажатие кнопки «Создать» и ссылку подтверждения в одном тесте.Я бы закончил первый тест (нажав на кнопку «Создать»), так как я должен увидеть какое-то сообщение, чтобы проверить мою электронную почтуЕсли вы хотите протестировать остальное поведение, вам следует создать еще один тест, в котором указан URL-адрес подтверждения и, нажав на него, вы увидите страницу приветствия.

...