如何对404进行单元测试或集成测试 - 未找到?

时间:2011-01-25 17:07:07

标签: tdd nunit watin bdd specflow

我的团队正在使用S#arp架构框架在ASP.Net MVC 2中编写内容管理的Web托管应用程序。我正在使用SpecFlow和WatiN进行集成测试,使用NUnit进行单元测试。

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分: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与用户的特定消息相关联,那么您只需单元测试相应的响应是否匹配。这将大大降低将来意外发送错误代码的可能性,并且您可以专注于真正的利益。