1

大约半年前,我开始深入研究单元测试。我进入了 TDD(或我认为的),现在我想开发一个 MVC 应用程序行为驱动。验收测试(真正的端到端)的概念对我来说是新的,因为我的上一个项目没有在验收测试环境中运行。

我从阅读一些好文章开始,尤其是 Sanderson 的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 中,但有时我只是盯着屏幕思考我的下一个测试。


Soo ..在那堵文字墙之后,实际问题是:我应该如何实施这种行为?

  • 坚持 UI 级别测试并根据需要进行重构以实现捕获逻辑
  • 回退到控制器级别测试
  • 你以任何其他方式启发我
4

2 回答 2

2

我不能在这里说什么是对还是错,所以我只会说我做了什么,因为它对我来说非常有效。

我使用 SpecFlow 来测试我的服务层。在 ASP.net MVC 中,这将是控制器。正如您所提到的,这种 UI 测试非常脆弱,所以我只在使用某种高级 JavaScript UI 时才会重复使用它。

这样,我的测试堆栈看起来像这样:

  1. NUnit 测试模型中更复杂的算法
  2. SpecFlow 用于测试控制器。这可以确保视图接收到它们应该接收的内容,并且模型可以按预期进行交互。
  3. QUnit 对我的 JavaScript 模型进行测试,我主要将其与 Knockout JS 一起使用(这两个看起来像是为彼此制作的)
  4. 手动验收测试(非常粗粒度且数量不多),有据可查
  5. 使用 WatiN 进行一些(非常少的)自动化 UI 测试,用于更高级的 UI

也就是说,大约 75% 的测试是针对第 2 项(SpecFlow),15% 是针对第 3 项(QUnit)。这就是它似乎对我有用的方式,但也非常欢迎任何建议。

于 2011-10-28T03:21:45.853 回答
1

我不会在一次测试中同时单击创建按钮和单击确认链接。我将完成第一个测试(单击创建按钮),因为我应该看到一些消息说要检查我的电子邮件。如果您想测试其余的行为,您应该创建另一个测试,其中给出确认 URL 并单击它,您应该会看到欢迎页面。

于 2011-10-31T17:27:00.263 回答