c# मैं एमक्यू का उपयोग कर एएसपी.नेट एमवीसी में एचटीपी कॉन्टेक्स्ट का नकल कैसे करूं?




asp.net-mvc mocking (4)

धन्यवाद उपयोगकर्ता 0100110010101।

यह मेरे लिए काम करता है और यहां मुझे नीचे दिए गए कोड के लिए टेस्टकेस लिखते समय कोई समस्या थी:

 var currentUrl = Request.Url.AbsoluteUri;

और यहां उन रेखाएं हैं जो समस्या हल करती हैं

HomeController controller = new HomeController();
//Mock Request.Url.AbsoluteUri 
HttpRequest httpRequest = new HttpRequest("", "http://mySomething", "");
StringWriter stringWriter = new StringWriter();
HttpResponse httpResponse = new HttpResponse(stringWriter);
HttpContext httpContextMock = new HttpContext(httpRequest, httpResponse);
controller.ControllerContext = new ControllerContext(new HttpContextWrapper(httpContextMock), new RouteData(), controller);

दूसरों के लिए उपयोगी हो सकता है।

[TestMethod]
public void Home_Message_Display_Unknown_User_when_coockie_does_not_exist()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    context
        .Setup(c => c.Request)
        .Returns(request.Object);
    HomeController controller = new HomeController();

    controller.HttpContext = context; //Here I am getting an error (read only).
    ...
 }

मेरे बेस कंट्रोलर को प्रारंभ करने का ओवरराइड है कि यह अनुरोध प्राप्त करें कॉन्टेक्स्ट। मैं इसे पास करने की कोशिश कर रहा हूं लेकिन मैं कुछ सही नहीं कर रहा हूं।

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
}

Moq का उपयोग करके मेरे RequestContext और HttpContext को मॉक करने पर मुझे और जानकारी कहां मिल सकती है? मैं कुकीज़ और सामान्य संदर्भ नकल करने की कोशिश कर रहा हूँ।


यहां एक उदाहरण दिया गया है कि आप इसे कैसे सेट अप कर सकते हैं: यूनिटटेस्ट्स के लिए HttpContext HttpRequest और HttpResponse मॉकिंग (Moq का उपयोग करके)

विस्तार विधियों पर ध्यान दें जो वास्तव में इस मॉकिंग कक्षाओं के उपयोग को सरल बनाने में मदद करते हैं:

var mockHttpContext = new API_Moq_HttpContext();

var httpContext = mockHttpContext.httpContext();

httpContext.request_Write("<html><body>".line()); 
httpContext.request_Write("   this is a web page".line());  
httpContext.request_Write("</body></html>"); 

return httpContext.request_Read();

यहां एक उदाहरण है कि एक एचटीपी मॉड्यूल अपेक्षित रूप से काम कर रहा है यह जांचने के लिए एमओसी का उपयोग करके यूनिट टेस्ट कैसे लिखना है: HttpRequest को लपेटने के लिए Moq का उपयोग करके HttpModule के लिए यूनिट टेस्ट

अपडेट करें: इस एपीआई को दोबारा प्रतिक्रिया दी गई है


एक अनुरोध, प्रतिक्रिया बनाएँ और उन्हें दोनों HttpContext में डाल दें:

HttpRequest httpRequest = new HttpRequest("", "http://mySomething/", "");
StringWriter stringWriter = new StringWriter();
HttpResponse httpResponse = new HttpResponse(stringWriter);
HttpContext httpContextMock = new HttpContext(httpRequest, httpResponse);

फर्जी एप्लिकेशन पथ पास करने के लिए मैंने कंट्रोलर कॉन्टेक्स्ट का उपयोग कैसे किया है:

[TestClass]
public class ClassTest
{
    private Mock<ControllerContext> mockControllerContext;
    private HomeController sut;

    [TestInitialize]
    public void TestInitialize()
    {
        mockControllerContext = new Mock<ControllerContext>();
        sut = new HomeController();
    }
    [TestCleanup]
    public void TestCleanup()
    {
        sut.Dispose();
        mockControllerContext = null;
    }
    [TestMethod]
    public void Index_Should_Return_Default_View()
    {

        // Expectations
        mockControllerContext.SetupGet(x => x.HttpContext.Request.ApplicationPath)
            .Returns("/foo.com");
        sut.ControllerContext = mockControllerContext.Object;

        // Act
        var failure = sut.Index();

        // Assert
        Assert.IsInstanceOfType(failure, typeof(ViewResult), "Index() did not return expected ViewResult.");
    }
}




httpcontext