2012-06-28 55 views
5

मैं एक यूनिट परीक्षण लिख रहा हूं और नियंत्रक विधि अपवाद फेंक रही है क्योंकि HttpContext/ControllerContext शून्य है। मुझे HttpContext से कुछ भी ज़ोर देने की ज़रूरत नहीं है, बस इसे पूर्ण न होने की आवश्यकता है। मैंने शोध किया है और मेरा मानना ​​है कि मोक जवाब है। लेकिन मैंने जो नमूने देखे हैं, उन्होंने मुझे बहुत मदद नहीं की है। मुझे httpcontext नकल करने के लिए, कुछ भी फैंसी करने की ज़रूरत नहीं है। मुझे सही दिशा में इंगित करें!httpcontext का नकल कैसे करें ताकि यह यूनिट परीक्षण से शून्य न हो?

+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/ साथ एक HttpContextFactory क्लास बनाया गया दो तरीके मॉक किए गए डेटा पर एक मॉकिंग httpcontext और अन्य सेटिंग वर्तमान नियंत्रक संदर्भ। – TheFlyingCircus

+0

आपको अपने प्रश्न के उत्तर के रूप में यहां अपने समाधान को रेखांकित करने वाला कुछ नमूना कोड रखना चाहिए। जब आप कर सकते हैं इसे स्वीकार करना सुनिश्चित करें। –

उत्तर

6

कक्षा में 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 आवेदन मजाक का काम हम बहुत नियमित आधार पर करना है।

मैं विजुअल स्टूडियो 2013 में अपग्रेड करने के बाद एमओसी 4 का उपयोग करके एमवीसी 3 एप्लिकेशन का उपयोग करके अपने अनुभव जोड़ना चाहता था। यूनिट परीक्षणों में से कोई भी डीबग मोड में काम नहीं कर रहा था और एचटीपीकॉन्टेक्स्ट "अभिव्यक्ति का मूल्यांकन नहीं कर सका" दिखा रहा था चर पर peek।

दृश्य स्टूडियो 2013 में कुछ ऑब्जेक्ट्स का मूल्यांकन करने के मुद्दे हैं। मैकगिंग मॉक किए गए वेब एप्लिकेशन को फिर से काम करने के लिए, मुझे टूल्स => विकल्प => डिबगिंग => सामान्य सेटिंग्स में "प्रबंधित संगतता मोड का उपयोग करें" को देखना था।