【问题标题】:BDD and ASP.NET MVC - Finding the HighwayBDD和ASP.NET MVC - 找到高速公路
【发布时间】:2011-11-26 09:19:22
【问题描述】:

大约半年前,我开始深入研究单元测试。我进入了 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 级别测试并根据需要进行重构以实现捕获逻辑
  • 回退到控制器级别测试
  • 还有什么其他方法可以启发我

【问题讨论】:

    标签: asp.net-mvc bdd specflow end-to-end


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 但是我应该从哪里获得端到端场景中第二个测试的确认链接?你真的为此接触过你的测试数据库吗?
      • 这取决于您,您可以运行代码以生成新用户和确认链接,然后将其传递给您的测试,或者您甚至可以模拟检查以查看两种情况(成功和失败)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多