2012-06-28 13 views
5

ユニットテストを書いていますが、HttpContext/ControllerContextがnullであるためコントローラメソッドが例外をスローしています。私はHttpContextから何かをアサートする必要はありません。ちょうどそれがNULLでないことが必要です。私は研究を行っており、私はMoqが答えだと信じています。しかし、私が見たすべてのサンプルは私を多く助けなかった。 httpcontextを嘲笑するだけで何もする必要はありません。私に正しい方向を向ける!ユニットテストでhttpcontextがnullにならないように模擬する方法は?

+1

この投稿はあなたに役立つと思います。 http://stackoverflow.com/questions/542132/mocking-a-httpcontext-response-output-with-moq –

+1

この投稿は多くの役に立ちました。http://www.emadibrahim.com/2008/04/04/unit-test-linq-to-sql-in-aspnet-mvc-with-moq/ with with HttpContextFactory Classをwith 2つの方法。 1つはHTTPコンテキストを嘲笑し、もう1つは現在のコントローラコンテキストを擬似データに設定します。 – TheFlyingCircus

+0

あなたの質問に対する答えとして、あなたのソリューションの概要を示すサンプルコードをここに置いてください。できればそれを受け入れるようにしてください。 –

答えて

6

これらの2つの機能は、クラス内でhereから取得されます。

public static class HttpContextFactory 
    { 
     public static void SetFakeAuthenticatedControllerContext(this Controller controller) 
     { 

      var httpContext = FakeAuthenticatedHttpContext(); 
      ControllerContext context = 
      new ControllerContext(
      new RequestContext(httpContext, 
      new RouteData()), controller); 
      controller.ControllerContext = context; 

     } 


     private static HttpContextBase FakeAuthenticatedHttpContext() 
     { 
      var context = new Mock<HttpContextBase>(); 
      var request = new Mock<HttpRequestBase>(); 
      var response = new Mock<HttpResponseBase>(); 
      var session = new Mock<HttpSessionStateBase>(); 
      var server = new Mock<HttpServerUtilityBase>(); 
      var user = new Mock<IPrincipal>(); 
      var identity = new Mock<IIdentity>(); 

      context.Setup(ctx => ctx.Request).Returns(request.Object); 
      context.Setup(ctx => ctx.Response).Returns(response.Object); 
      context.Setup(ctx => ctx.Session).Returns(session.Object); 
      context.Setup(ctx => ctx.Server).Returns(server.Object); 
      context.Setup(ctx => ctx.User).Returns(user.Object); 
      user.Setup(ctx => ctx.Identity).Returns(identity.Object); 
      identity.Setup(id => id.IsAuthenticated).Returns(true); 
      identity.Setup(id => id.Name).Returns("a.ali174"); 

      return context.Object; 
     } 


    } 

ユニットテストから、私はそのように呼ばれました。

HttpContextFactory.SetFakeAuthenticatedControllerContext(controller); 

あなたのテストプロジェクトにMoqをインストールしていることを確認してください:

Install-Package Moq 
0

私はこれが古い主題である知っている、しかし、ユニットテストのためのMVCアプリケーションをモックすることは、我々は非常に定期的に行うものです。

Visual Studio 2013にアップグレードした後、Moq 4を使用してMVC 3アプリケーションをMockingしました。単体テストはデバッグモードで動作していませんでした。HttpContextは試行したときに「式を評価できませんでした」変数を調べる。

Visual Studio 2013には、いくつかのオブジェクトを評価する際の問題があります。デバッグ用の模擬Webアプリケーションを再び動作させるには、Tools => Options => Debugging => General settingsの "Use Managed Compatibility Mode"をチェックしなければなりませんでした。

関連する問題