加快ASP MVC单元测试

时间:2009-09-22 18:16:25

标签: c# asp.net-mvc unit-testing

人们如何为ASP MVC运行自动化测试?

目前,我们正在使用本机Visual Studio单元测试并在一台计算机上线性运行它们。它们太慢而且目前无用。

切换到nunit?使用Incredibuild XGE分发单元测试?有人试过这些或有其他想法吗?

感谢。

4 个答案:

答案 0 :(得分:4)

MSTest的问题不在于运行速度本身,而在于测试环境本身。您可以使用Resharper运行MSTest测试,它们非常快速。我的测试是针对存储库接口运行的,我在调用控制器时模拟了一个内存存储库。

那就是说,你的控制器测试应该很轻:返回类型(ViewResult,JsonResult)和模型类型。其他不多(见http://www.arrangeactassert.com/how-to-unit-test-asp-net-mvc-controllers/)。与控制器分开测试业务层呼叫。做得正确,一千次单元测试只需几秒钟即可完成。

答案 1 :(得分:3)

你看到的大部分速度都是MSTests每次想要运行一次测试时都会启动ASP.NET开发服务器。

我尽可能多地将我的应用程序保存在ASP.NET应用程序的 之外的单独库中,以便它们可以独立进行单元测试。这可以避免在单元测试期间启动ASP.NET开发服务器时所遇到的打击。

在模拟控制器时,我没有看到任何原因导致您无法删除告诉测试系统启动开发服务器的属性。毕竟,嘲笑的全部目的不是取出“外部”组件吗?

同样,为模型使用存储库的整个目的是为了可以注入模拟对象进行测试。这些测试也不需要开发服务器。

就观点而言,我不会为这些观点编写单元测试。保持它们尽可能薄,并通过目视检查手动测试。

可以为包含ASP.NET开发服务器的模型和控制器提供一组不同的测试。这些测试将成为集成测试套件的一部分。

答案 2 :(得分:0)

更改单元测试框架对你没有任何好处

如果您的测试花费的时间太长,主要是因为它们连接到数据库或Web服务......

我建议您使用CI运行所有测试以及单独的测试,例如UI层应该将其测试与数据访问测试分开...

答案 3 :(得分:0)

测试速度受几个因素影响 - 它们实际上只是MSTest中的一个。

以下任何一项都会对测试速度产生影响:

  • 实际执行数据库访问的测试
  • 依赖于磁盘访问的测试(例如,阅读web.config)
  • 实际损坏的代码(例如,执行无数不必要的循环,其他性能漏洞)
  • 测试过多(一次测试几件事)或者没有真正测试一个单元

单位测试,根据定义,应该小而快。除了你的框架之外,在上面的列表中查找可能会减慢其速度的其他内容。

相关问题