使用Microsoft Fake Framework MVC4对WebMatrix.WebData进行单元测试

时间:2013-02-20 23:52:43

标签: c# unit-testing asp.net-mvc-4 security microsoft-fakes

我无法使用新的Microsoft Fake Framework测试来自AccountController的任何注销,登录和注册操作,而不会出现此错误消息:System.Security.VerificationException:Operation可能会破坏运行时的稳定性。

单元测试非常简单:

    [TestMethod]
    public void LogOff()
    {
        var AccountController = new AccountController();
        RedirectToRouteResult RedirectToRouteResult;

        //Scope the detours we're creating
        using (ShimsContext.Create())
        {
            ShimWebSecurity.Logout = () => {  };
            var test = AccountController.LogOff();
            RedirectToRouteResult = AccountController.LogOff() as RedirectToRouteResult;
        }

        Assert.IsNotNull(RedirectToRouteResult);
        Assert.AreEqual("Index", RedirectToRouteResult.RouteValues["Action"]);
        Assert.AreEqual("Home", RedirectToRouteResult.RouteValues["controller"]);
    }

还可以找到:http://social.msdn.microsoft.com/Forums/en-US/vsunittest/thread/f84962ea-a9b2-4e0d-873b-e3cf8cfb37e2谈论相同的错误但没有答案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我在VS2012 Update 1发布之前问了同样的问题(VerificationException when instantiating MVC controller during unit testing),我得到了一位来自微软的人的回复,他说他们正在研究它,它应该在下次更新时可用。好吧,从那时起什么都没有

但是,为了获得结果并继续使用Microsoft Fakes Framework进行测试,我使用我自己的私有方法将对UrlHelper类中的MVC方法的调用包装起来,这些方法返回原始类型,如{{1然后Shim单元测试给我一个想要的结果。这样我就不会打电话给底层的MVC基础设施,我得到了理想的结果。此外,您将需要删除System.Web.Mvc.Fakes引用,否则VerificationException将不断弹出。

如果您觉得这很乏味,那么您应该转而使用更成熟的单元测试框架,如Moq或Rhino。