BDD和ASP.NET MVC - 寻找高速公路

时间:2011-09-27 20:46:10

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

大约半年前,我开始深入研究单元测试。我进入了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级别测试和重构,以实现捕获逻辑
  • 回退到控制器级别测试
  • 你启发我的任何其他方式

2 个答案:

答案 0 :(得分:2)

我不能说这里有什么是对的,所以我只会说我做的,因为它对我来说非常好。

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

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

  1. NUnit测试模型中更复杂的算法
  2. 用于测试控制器的SpecFlow。这样可以确保视图能够获得应有的内容,并确保模型按预期进行交互。
  3. 我的JavaScript模型的QUnit测试,我主要使用Knockout JS(这两个看起来像是彼此制作的)
  4. 手动验收测试(非常粗粒度,而不是太多这些),记录良好
  5. 使用WatiN进行更多高级UI的一些(极少数)自动UI测试
  6. 尽管如此,大约75%的测试是针对第2项(SpecFlow)和15%针对第3项(QUnit)。这就是它对我有用的方式,但任何建议都非常受欢迎。

答案 1 :(得分:1)

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