大约半年前,我开始深入研究单元测试。我进入了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 ..在文本墙之后的实际问题:我应该如何实现这种行为?
答案 0 :(得分:2)
我不能说这里有什么是对的,所以我只会说我做的,因为它对我来说非常好。
我使用SpecFlow测试我的服务层。在ASP.net MVC中,那将是控制器。正如您所提到的那样,这种UI测试非常脆弱,因此在使用某种高级JavaScript UI时我只会重复使用它。
这样,我的测试堆看起来像这样:
尽管如此,大约75%的测试是针对第2项(SpecFlow)和15%针对第3项(QUnit)。这就是它对我有用的方式,但任何建议都非常受欢迎。
答案 1 :(得分:1)
我不会同时点击“创建”按钮并在一次测试中单击确认链接。我会完成第一个测试(点击“创建”按钮),因为我应该看到一些消息,要求查看我的电子邮件。如果要测试其余行为,则应创建另一个测试,在给定确认URL并单击它的情况下,您应该看到欢迎页面。