2009-08-13 54 views
12

我正在研究测试ASP.NET MVC应用程序的其他方法,并遇到了Steve Sanderson的MvcIntegrationTestFramework。该方法看起来很有前途,但我想知道是否有人有任何实际的经验分享。有没有人使用过史蒂夫桑德森的MvcIntegrationTestFramework?

+0

我还没有使用它,但将浏览器从集成测试中解耦的想法非常有吸引力。 – 2009-08-13 17:59:32

+0

但是对我来说,整合意味着这个层面的整合。而浏览器(特别是JavaScript和AJAX)实际上是一个应该被测试的层。 – 2009-08-14 07:43:36

+0

嗨,詹姆斯。这当然需要完成,但根据我的经验,很难实现自动化,并且由于浏览器的差异,您需要为其中的一部分进行自动化。所以这不是替代品,而是浏览器测试的补充。对找到回归有用。 – Maurice 2009-08-14 08:13:19

回答

7

我有一些非常好的结果。我不在乎这里的其他人说什么需要测试视图,只要您将第一行代码添加到视图中,即使代码严格与演示文稿相关,您也会引入可能出现的错误编写自动化测试是一个好主意。我的主要兴趣只是捕捉尽可能多的白屏和黄屏异常/错误。要做到这一点我一直使用从史蒂芬的介绍博客文章的片段,以确保页面呈现正确不抛出任何异常:

Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html")); 

小缺陷,我用这个框架看可能是:

  • 如果你的网站在视图和动作方法之间做了一些非常复杂的模型绑定,你可能会发现自己创建了一些非常大的NameValueCollections,比如在这个例子中(一个实际需要LogonModel视图模型对象的动作方法),因为我不喜欢看不到任何通过使用这个框架将任何复杂的视图模型对象类型传递到你的动作方法的方式:

var result = browsingSession.ProcessRequest("/account/logon", HttpVerbs.Post, new NameValueCollection { {"UserName","myName"}, {"Password", "myPassword"}, {"returnUrl", "/home/myActionMethod"} });

  • 执行browsingSession.ProcessRequest(“URL”)创建一个应用程序主机/上下文,实际上执行的是你正在使用中,要测试的项目配置测试的网页代码。这意味着测试运行速度有点慢,并且可能会修改真实数据,因为我没有看到通过使用任何内置的工具在虚拟版本中测试您的Web项目中的数据访问存储库的快速简便的方法测试框架。换句话说,你可能需要使用一些基于web.config的方式来推出你自己的方法。
+0

跟进 - 我强烈建议转移到MVC3和使用RazorGenerator。您可以同时运行MVC2和MVC3,一次迁移单个网页,我发现这些网页可以无缝工作。虽然Steve Sanderson的框架在MVC2的限制范围内工作良好,但是我们发现,在我们的开发机器上使用测试框架与在C.I上使用测试框架时,我们很难管理对硬编码文件路径的更改。服务器。 RazorGenerator + MVC3不存在这个问题。 – 2011-12-12 14:40:58

+1

感谢您的跟踪!你能简单地解释一下RazorGenerator如何帮助你替换MvcIntegrationTestFramework来进行集成测试吗?预编译您的Razor视图如何对此有所帮助?也许你已经写过博客了:-) – Oliver 2012-07-18 18:39:23

0

我还没有使用过这个框架。但根据我阅读他的书的经验 - Pro ASP.NET MVC Framework以及他开发的另一个验证框架xVal,我会说“他很棒”。

+0

我真的很喜欢他的书。事实上,我现在在我旁边有一个副本。 – Maurice 2009-08-14 06:43:49

0

用它做了一点实验,在某些情况下它可能非常有用。一般大拇指,如果我看到进一步的工作,我会用在未来的项目。

没有进行,因为已经有WatIn设置和照顾一些事情,我不想在这个框架中再次处理。例如。通过对话进行认证,这可能需要更改代码。

1

阅读ardave's answer前一阵子之后,我们实际上去尝试一下我们自己对我们新Orchard基础的应用Marinas.info。

首先,我建议任何人从this version的分叉开始,因为它比原来更容易设置。

对于任何“正常”的MVC3应用程序,它只是起作用。不幸的是,与Orchard一起,它的表现并不好,至少没有一个未经修改的Global.asax.cs版本。所以我们仍然沿着browser based testing road走,但我们仍然使用它来执行应用程序内的Orchard命令,这足够快。