2

如果没有以下错误消息,我无法使用新的 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谈论相同的错误但没有答案。

谢谢!

4

1 回答 1

1

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

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

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

于 2013-02-21T00:08:25.377 回答