2

次のエラーメッセージが表示されない限り、AccountControllerからのログオフ、ログイン、登録アクションを新しいMicrosoft Fake Frameworkでテストすることはできません: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の人から、作業中であり、次の更新で利用可能になるはずだという応答がありました。それ以来、何もありません。

ただし、結果を取得し、Microsoft Fakes Frameworkを使用してテストを続行するために、UrlHelperクラス内のMVCメソッドの呼び出しを、のようなプリミティブ型を返す独自のプライベートメソッドでラップしstring、単体テストをシムして目的の結果。そうすれば、基盤となるMVCインフラストラクチャに電話をかけることはなく、望ましい結果が得られました。また、System.Web.Mvc.Fakes参照を削除する必要があります。そうしないと、VerificationExceptionがポップアップし続けます。

これが面倒だと感じた場合は、MoqやRhinoなどのより成熟した単体テストフレームワークに切り替える必要があります。

于 2013-02-21T00:08:25.377 に答える