2011-01-25 73 views
4

我的团队正在使用S#arp架构框架在ASP.Net MVC 2中编写内容管理的网站托管应用程序。我使用SpecFlow和WatiN进行集成测试,NUnit用于单元测试。如何对404进行单元测试或集成测试 - 未找到?

我有一个自定义控制器工厂,根据URL和站点在数据库中查找页面,然后加载适当的控制器和操作。当数据库中没有找到页面(或站点)时,它还会加载错误控制器。

我想编写一个单元测试或集成测试,验证在URL无效时404页面正确显示。 WatiN无法检查响应头,因此无法准确确保加载实际的404页面。这可能会消除集成测试的解决方案。

我是TDD和BDD的新手,所以我可能会错过某些明显的东西。此外,我对这个项目进行了一些改装测试,这使得它变得更加困难。

在此先感谢。

回答

8

通常当我们编写BDD场景时,我们从用户的角度编写它们。

如果用户是普通人,他们可能并不在乎标题是否是真正的404。他们更喜欢给他们一个明确而有用的信息的页面。编写场景以检查清楚且有用的消息。

Given no section on unicorns exists 
When the user browses for horses 
And changes the url to be about unicorns 
Then the user should be told that no such page exists. 

BDD是不是真的关于测试。这是关于让你发现你没有想到的其他事情的对话,以及对应该发生什么的共同理解。例如,普通用户试图访问管理页面时会发生什么?他们应该得到“访问被拒绝”还是根本不知道该页面在那里?如果页面被删除会怎么样?这些讨论比试图阻止一切事情更有用。

如果您的404与特定消息关联到用户,那么您可以简单地单元测试相应的响应是否匹配。这将大大降低将来无意中将错误代码与消息一起发送的可能性,并且您可以专注于真正的好处。

+0

我想我很迷惑“功能”与“规格”。该应用程序需要返回一个有效的404错误页面,但正如你所说的,功能文件和相关测试可能不是测试它的适当位置。我正在查看Feature文件作为规范列表,并且这种想法可能有缺陷。你回答了我的问题。谢谢! – Eddie 2011-01-25 18:15:15

相关问题