使用MOLES的ASP .net单元测试控制器

时间:2011-06-03 09:01:04

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

如何使用moles框架对包含HttpConext的控制器进行单元测试?     我的控制器代码是

public ActionResult Index()
        {
             MyRepositoryClass myRepo = new MyRepositoryClass (System.Web.HttpContext.Current);
             string fs = ipser.GetCityName();
             return View();
        }

My code for the controller in unit test project is
public class MyClassTest
{

   [TestMethod]
   [HostType("Moles")]
    public void Index_Test()
    {
         string originalViewName="Index";
         MyController myContl = new MyController ();
         var result =myContl.Index() as ViewResult;
         Assert.IsNotNull(result, "Should return a view");
         Assert.AreEqual(originalViewName, result.ViewName, "View name should have been {0}", originalViewName);
    }

我应该如何使用moles框架测试我的控制器?

1 个答案:

答案 0 :(得分:1)

快速回答是不要使用Moles,而是删除对静态HttpContext对象的依赖。

如果您使用HttpContextBase(在.NET 4.0中的System.Web.Abstractions中)而不是HttpContext,您将能够在单元测试中提供假的HttpContext。您需要在MVC应用程序中使用IoC容器,并确保在配置IoC容器时将HttpContextWrapper(HttpContext.Current)映射到HttpContextBase。

有关于如何在网上完成此操作的大量信息。只是谷歌的HttpContextBase,HttpContextWrapper和MVC,我相信你会找到很多示例代码和解释来帮助你。