4

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

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

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

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

提前致谢。

4

1 回答 1

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 与给用户的特定消息相关联,那么您可以简单地对相应响应匹配进行单元测试。这将大大减少将来意外发送错误代码和消息的机会,并且您可以专注于真正的好处。

于 2011-01-25T17:51:30.690 回答