60

我意识到这是大约 20 个不同帖子的副本,但没有一个是特定于 MVC4 的,而且我所见过的没有一个能真正回答我所有的问题。到目前为止,我第一次涉足 TDD 世界至少可以说是令人沮丧的。我尝试做的大部分事情似乎与 MVC 4 不兼容,或者如果不使用我还不太了解的文档不完整的第三方库,这几乎是不可能的。

我想要做的是编写一个测试来测试我的控制器动作、它们传递的模型以及动作将模型发送到的视图。我想测试视图是否存在,我想测试传递的模型是否是视图的正确类型,我想要一些方法来测试它是否能正确处理。我也希望能够测试我的路线。并测试身份验证过滤器?

我想要一种对 ASP.Net MVC 进行单元测试的方法,这种方法几乎没有机会。

测试动作的模型输出似乎很容易,但测试视图几乎是不可能的。

所以这是我的问题清单:

  1. 一旦我测试了动作并得到了动作结果,我如何测试它想要的视图是否存在?
  2. 如何测试我的路线?
  3. 如何测试以确保我的视图得到正确处理?
  4. 对 ASP.Net MVC 4 进行彻底单元测试的真正“最佳实践”是什么?
  5. 如何对表单身份验证进行单元测试?
  6. 如何对动作过滤器进行单元测试?

我更喜欢使用内置的 Visual Studio 测试项目,但如果我必须使用 NUnit,我必须。我只需要确保它正确完成。

预先感谢您的回复。

编辑:我也无法让 NUnit 与我的 MVC4 应用程序一起使用,因为其中一个程序集与.NET 版本不兼容。

4

1 回答 1

59
  1. 确保视图存在
  2. http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx/
  3. http://blog.davidebbo.com/2011/06/unit-test-your-mvc-views-using-razor.html
  4. 见下文
  5. 如何对使用 FormsAuthentication 的 ASP.NET MVC 控制器进行单元测试?
  6. 如何在 ASP.NET MVC 中测试操作过滤器?

不。4:这是一个很难的问题。如何彻底测试任何东西?就个人而言,除了使用 3 种主要浏览器和我的两只眼睛之外,我并没有真正测试视图,因为如果不实际使用它就很难测试网站及其所有组件。你有 JavaScript 触发、CSS 样式化,并且它在不同的浏览器中看起来不同。因此,对我来说,彻底测试视图似乎只是您网站整体可用性的一小部分。如果您正在开发基于简单表格的财务数据报告,请努力测试该数据。如果您的视图是一个花哨的 Ajax 站点的基础,那么可能不要像体验那样测试 HTML。我知道这不是一个简单、直接的答案,但可接受的覆盖范围总是涉及权衡。

于 2012-03-29T00:10:18.400 回答