2011-09-27 62 views
1

大约半年前,我开始深入单元测试。我进入了TDD(或者我认为的那样),现在我想开发一个MVC应用程序行为驱动。 验收测试(真正的端到端)的概念对我来说是新的,因为我的上一个项目没有在验收测试环境中运行。BDD和ASP.NET 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 | [email protected] | 
    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水平测试,并实现采集逻辑
  • 回落到控制器级别的测试需要重构
  • 你见识一下

回答

1

我不会结合点击创建按钮并点击确认链接进行一次测试。我会完成第一个测试(点击创建按钮),因为我应该看到一些消息说,检查我的电子邮件。如果你想测试其余的行为,你应该在给定确认URL并点击它的情况下创建另一个测试,你应该看到欢迎页面。

+0

但是从哪里可以获得端到端场景中第二次测试的确认链接?你真的碰到你的测试数据库吗? –

+0

这取决于你,你可以运行代码来生成一个新的用户和确认链接,然后将它传递给你的测试,或者你甚至可以嘲笑支票以查看两种情况(成功和失败)。 –

2

任何其他方式我不能说什么是正确的或在这里错了,所以我只会说我做了什么,因为它对我来说工作得很好。

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

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

  1. NUnit的测试,对于较复杂的algorythms模型
  2. SpecFlow测试控制器。这可以确保意见能够收到他们应该做的事情,并确保这些模式按预期进行交互。
  3. 我的JavaScript的模型,我主要用与淘汰赛JS(这两个看起来像是天生的一对)
  4. 手册验收测试(非常粗粒度并没有太多的这些)QUnit的测试,有据可查
  5. 少数(很少)自动化UI与华廷测试为更先进的UI

也就是说,编写了测试的约75%是用于项目2(SpecFlow)和15%对项目3(QUnit) 。这就是它似乎为我工作,但任何建议也非常欢迎。