我刚刚从多年的Rails开发变成了一个我正在攻击.net mvc的演出.它很痛,但我希望这很大一部分只是学习曲线.
对我来说,不容易看到的是.NET世界中Rails功能和集成测试的模拟. Rails使功能测试变得如此明显和简单,以至于不花时间来实现覆盖,你就是愚蠢的.使用.NET – 我还没有让Google产生一个看起来值得的结果.我希望这是我新生的.net状态,这只是让我无法输入正确的搜索条件或错过一些范例.
救命!
解决方法
Rails有3种类型的测试单元,功能和集成.
单元测试测试您的模型
控制器的功能测试
集成测试用于测试控制器操作之间的流程
这种范式似乎从一开始就用rails来教导.
但是在.NET MVC世界中,测试方法并没有像在Rails中那样进行布局.
许多开发人员将在您的模型中编写单元测试的方式在其控制器上编写单元测试.您基本上调用方法(Controller Action)并从方法中获取对象.然后,您可以断言它具有您期望的值.这样做是一个痛苦的屁股,因为你必须模拟这么多的废话(HttpContext等).另外,它不是功能测试.您只测试一种方法,而不是测试应用程序的功能.
在Rails中,您没有在控制器上编写单元测试,您实际上正在发出Web请求并获得Web响应.您可以检查状态代码,cookie等.您正在从头到尾测试系统.
在.NET MVC中有几种方法可以做到这一点
1)Steven Sanderson有一个小工具来帮助解决这个问题.
http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/
当我第一次看到它并开始使用它时,我认为它很棒,但我遇到了问题.
2)RestSharp NUnit – 这是我目前对进行这些测试的偏好.它允许您将Web请求放在一起并获得响应非常简单.使用一些通用方法,您可以使用restsharp快速移动. NUnit将为您提供所需的断言.我只是针对我的本地IIS服务器发出请求,并断言我在响应中期望的不同项目.您将无法像在轨道中那样测试分配给视图的模型,但这对我来说并不是问题.
如果您已经习惯了RSpec,那么您可以获得类似的SpecFlow.
Rails将测试构建到框架中,它是一流的公民.它太糟糕了,这不是.NET MVC中的这种方式.
希望有所帮助.