【问题标题】:How can I unit test or integration test for 404 - Not Found?如何对 404 - Not Found 进行单元测试或集成测试?
【发布时间】:2011-01-25 17:07:07
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

    标签: tdd nunit watin bdd specflow


    【解决方案1】:

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

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

    【讨论】:

    • 我想我将“功能”与“规格”混淆了。该应用程序需要返回一个有效的 404 错误页面,但正如您所说的功能文件和相关测试可能不是测试它的合适位置。我将功能文件视为规范列表,这种想法可能有缺陷。你回答了我的问题。谢谢!
    • 没问题。很高兴为您提供帮助,并且您发现该方法很有用。我发现“规范”这个词并不能帮助我专注于对话和发现,所以我不倾向于使用它。恕我直言,“给我一个场景……”对利益相关者更加友好。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2016-11-22
    • 1970-01-01
    • 2012-01-08
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多