自动化asp.net mvc的单元测试

时间:2010-10-25 13:03:47

标签: unit-testing asp.net-mvc-2

今天我终于开始认真地为我的新ASP.net MVC项目编写一些单元测试。但是,某些单元测试会针对每个控制器中的每个操作进行返回:

  • 执行测试返回的ActionResult是否为空。
  • 如果ModelState无效,则执行测试操作是否返回有效的ActionResult。
  • 如果ActionResult的类型与特定类型(例如ViewResult或RedirectResult)匹配,则执行测试。

对于每个操作,这三个测试包含或多或少相同的代码。由于我希望避免重复代码,因此我想到为每个操作自动执行这些“默认”测试。我做了一些关于它的快速谷歌,但找不到任何东西。

所以:

  • 自动执行默认测试是明智之举吗?
  • 如果是,可以使用任何脚本或之前已经做过类似事情的人吗?
  • 如果以前没有人做过什么,有关如何处理此事的任何建议吗?

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

我认为对不同控制器进行类似测试是“重复”代码。应该重构测试逻辑,以便可以重复使用它。因此,重复使用测试代码来测试不同的控制器并不重复。

你看过MvcContrib内的TestHelpers吗?我认为已经实现了很多常见的控制器类型测试。还有其他方面使测试更容易一些。话虽如此,它可以用来更轻松地设置您的测试。看看关于Unit Testing Overkill的答案。

答案 1 :(得分:1)

第一个重要的战术问题是“你使用的是什么单元测试堆栈?”有些[mstest]在测试中不支持继承,所以做这种事情很棘手。

至于实际操作,我一般发现这可能有意义,但在单元测试中共享代码太多可能是件坏事 - 当您的单元测试代码变得如此复杂以至于需要单元测试时会发生什么对于测试代码?