在ASP.NET MVC应用程序中测试哪些最重要的东西?

时间:2009-02-09 05:42:33

标签: asp.net-mvc unit-testing

关于ASP.NET MVC单元测试的大多数stackoverflow帖子都讨论了特定问题或要测试的特定事物,例如testing HtmlHelpers。关于最佳实践主题的其他人有surprisingly few answers。在我看来,我看过的可用视频是completely useless - 并且令人费解long(当你看了1.5小时而没有学到任何东西时)。

我想知道实际上这样做的人是:

  • 首先要测试的最重要的事情是什么
  • 什么不需要测试(对我说的震惊恐怖,但我不是100%之后)
  • 什么是难以进行测试,以及如何克服难以测试的问题。
  • 在重构中测试无法捕获的内容可能会中断。

我对如何进行单元测试并不陌生 - 但实际上我一直都很陌生。我非常感谢那些从事ASP.NET MVC单元测试专家的经验教训。

我真的在寻找你在尝试之后可能会发现的具体事情 - 而不是像'使用界面'那样的一般建议 - 尽管当然欢迎任何建议。

哦,让我说我决定使用微软的单元测试 - 只是因为它已经存在了。我认为所有答案都适用于所有测试框架。

3 个答案:

答案 0 :(得分:7)

  • 测试您的路由。在View中生成URL时,应使用RouteLink消除歧义,但是当您提交URL时,您依赖路由系统来选择正确的路由。因此,测试您支持的URL模式实际上会返回正确的路由。
  • 测试您的控制器操作。使用模拟存储库,并测试手动调用每个操作是否具有您期望的结果。
  • 测试模型中的所有业务逻辑。这很明显,与非MVC应用程序没什么不同。
  • 测试您编写的所有自定义视图助手。虽然我一般不对单元测试视图进行单元测试,但是查看帮助程序是不同的。
  • 测试您的JavaScript。有针对此的单元测试框架,测试JavaScript非常简单,几乎不需要这样的框架。但是测试JavaScript非常重要,因为语言倾向于隐藏你的错误。
  • 如果您已编写任何自定义模型粘合剂,则需要特别注意。首先,通过单元测试调试模型绑定器比在应用程序中“实时”调试模型绑定器要容易得多。

答案 1 :(得分:3)

我想详细说明控制器操作的测试:

  • 验证您是否获得了正确的ActionResult。重定向与视图不同。
  • 同时验证预期的视图名称。如果你依赖于默认视图,它应该是空的。
  • 验证您是否获得了正确的视图模型。
  • 验证操作中的所有分支。将它们保持在最低限度,并在它们长得太多时将它们移动到帮助者/服务中。

简而言之,请验证您将使用的ActionResult中的任何内容。

答案 2 :(得分:1)

我不认为答案必须特定于ASP.NET MVC。 与任何其他应用程序一样,您必须测试的最重要的是您的核心逻辑。 也就是说,您的模型代码和控制器操作。