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

本文关键字:WebData 单元测试 WebMatrix Microsoft Fake Framework MVC4 使用 | 更新日期: 2023-09-27 18:00:17

如果没有以下错误消息,我无法使用新的Microsoft Fake Framework测试来自AccountController的任何注销、登录和注册操作:System.Security.VerificationException:操作可能会破坏运行时的稳定。

单元测试非常简单:

    [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谈论同一个bug但没有答案。

谢谢!

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

在VS2012 Update 1发布之前,我问了同样的问题(在单元测试期间实例化MVC控制器时出现VerificationException),我得到了微软的一位同事的回复,他说他们正在研究它,应该在下一次更新中提供。从那以后什么都没有。

然而,为了获得结果并继续使用Microsoft Fakes Framework进行测试,我用自己的私有方法封装了对MVC方法(如UrlHelper类中的方法)的调用,这些方法返回string等基元类型,然后对单元测试进行Shim,以获得所需的结果。通过这种方式,我从未调用底层MVC基础设施,并且得到了所需的结果。此外,您还需要删除System.Web.Mvc.Fakes引用,否则VerificationException将不断出现。

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