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

Asp.net mvc BDD和ASP.NET MVC-寻找高速公路,asp.net-mvc,bdd,specflow,end-to-end,Asp.net Mvc,Bdd,Specflow,End To End,大约半年前,我开始钻研单元测试。我进入了TDD(或者我认为是什么),现在我想开发一个行为驱动的MVC应用程序。 验收测试(真正的端到端)的概念对我来说是新的,因为我的上一个项目没有在可验收测试的环境中运行 我从读一些好文章开始,尤其是Sanderson的文章,并通过阅读他关于这个主题的书来支持我的MVC技能 我正在使用SpecFlow和SimpleBrowser进行端到端测试。 通过导航栏驾驶导航是小菜一碟,但是我现在被卡住了。 我的目标是实现用户帐户,以便进一步创建文章和评论。驾驶注册程序让我

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

我从读一些好文章开始,尤其是Sanderson的文章,并通过阅读他关于这个主题的书来支持我的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!"
我真的不知道如何提供必要的测试环境(本例中是一个邮件服务器)并降低测试的脆弱性(考虑将“Create”按钮重新标记为“Submit”)。更不用说在捕获生成器中编织以防止以后自动创建用户(哦,讽刺的是)。也许我只是想得太多了,这在TDD中是不应该的,但有时我只是盯着屏幕思考我的下一个测试


苏。。在这段文字之后,实际的问题是:我应该如何实施这种行为

  • 根据实现捕获逻辑的需要,坚持UI级测试和重构
  • 退回到控制器级测试
  • 你有没有其他方法可以启发我

我不能说什么是对的,什么是错的,所以我只说我所做的,因为这对我来说非常有效

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

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

  • NUnit测试模型中更复杂的算法
  • 用于测试控制器的SpecFlow。这确保了视图接收到它们应该接收的内容,并确保模型按预期进行交互
  • QUnit测试我的JavaScript模型,我主要使用Knockout JS(这两个模型看起来像是为对方设计的)
  • 手动验收测试(非常粗粒度,不太多),有充分的记录
  • 使用WatiN进行的一些(很少)自动化UI测试,用于更高级的UI

  • 也就是说,大约75%的测试是针对第2项(SpecFlow),15%针对第3项(QUnit)。这对我来说似乎是可行的,但是任何建议都是非常受欢迎的。

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

    但是在端到端场景中,我应该从哪里获得第二个测试的确认链接呢?你真的为此触摸了你的测试数据库吗?这取决于你,你可以运行代码来生成一个新的用户和确认链接,然后将其传递给你的测试,或者你甚至可以模拟检查来查看两个场景(成功和失败)。