2011-12-14 8 views
6

के साथ एमवीसी फॉर्म पोस्ट का नकल कैसे करें किसी को भी बताएं कि एमक्यू का उपयोग करके एमवीसी फॉर्म पोस्ट को कैसे नकल करना है?एमओसी

मैं चाहता हूं कि यूनिट कुछ अलग-अलग फॉर्म पोस्टों के आधार पर मेरी विधि का परीक्षण करे।

मैंने इसके लिए Google की कोशिश की और वहां एक शीर्ष से नीचे मार्गदर्शिका नहीं है।

धन्यवाद

संपादित करें: जोड़ने कोड

[TestMethod] 
    public void SubscriptionControllerTest() 
    { 
     var subscriptionViewModel = new SubscriptionViewModel(); 

     //HTTP REQUEST SET UP 
     var httpRequest = new Mock<HttpRequestBase>(); 

     httpRequest.Setup(r => r.Path).Returns("/Subscription/SendEmail"); 

     httpRequest.Setup(r => r.Form).Returns(delegate() 
     { 
      var nv = new NameValueCollection(); 
      nv.Add("FirstName", "John"); 
      nv.Add("LastName", "Smith"); 
      nv.Add("Email", "[email protected]"); 
      nv.Add("Comments", "Comments are here..."); 
      nv.Add("ReceiveUpdates", "true"); 
      return nv; 
     }); 


     //HTTP CONTEXT SET UP 
     var httpContext = new Mock<HttpContextBase>(); 

     httpContext.Setup(c => c.Request).Returns(httpRequest.Object); 

     var subscriptionController = new Mock<SubscriptionController>(); 
     subscriptionController.Setup(s => s.HttpContext).Returns(httpContext.Object); 

     var result = subscriptionController.Object.SendEmail(subscriptionViewModel); 

     Assert.AreEqual(((ViewResult)result).ViewName, "Index"); 

    } 
} 

मैं एक नियंत्रक SubscriptionController कहा जाता है। वहां, मेरे पास SendEmail नामक एक्शन विधि है। मैं उपरोक्त इस टेस्ट विधि का उपयोग करके अपना सदस्यता/SendEmail चलाने में सक्षम होना चाहता हूं। मेरा विचार निम्न फ़ील्ड के साथ एक फ़ॉर्म है: पहला नाम, अंतिम नाम, ईमेल, टिप्पणियां और एक चेकबॉक्स। मुझे इस फॉर्म का नकल करने और मेरे नियंत्रक, http अनुरोध और संदर्भ को नकल करने की आवश्यकता है। मैं थोड़ा उलझन में हूं कि नकली क्या है और वास्तविक के रूप में क्या उपयोग करना है। किसी भी स्पष्टीकरण के लिए धन्यवाद।

+0

क्या आप कक्षा (या इसका एक प्रासंगिक हिस्सा) पोस्ट कर सकते हैं जिसे आप नकली करने की कोशिश कर रहे हैं? –

उत्तर

6

उत्तर: आप Request.Form में फॉर्म मान सेट करके फ़ॉर्म पोस्ट का नकल कर सकते हैं। इससे पहले कि मैं HttpRequest का मज़ाक उड़ा रहा था, फॉर्म मान सेट अप कर रहा था और फिर httpRequest ऑब्जेक्ट को HttpContext ऑब्जेक्ट से जोड़ रहा था। यह दृष्टिकोण काम नहीं किया।

मैं नीचे समाधान पोस्ट कर रहा हूं, बस तुलना करें कि मैंने पहले किया है और आप समझेंगे।

[TestMethod] 
public void TestSendSubscriptionEmail() 
{ 
    //HTTP CONTEXT SET UP 
    var httpContext = new Mock<HttpContextBase>();   

    var routeData = new RouteData(); 
    httpContext.Setup(c => c.Request.RequestContext.RouteData).Returns(routeData); 

    httpContext.Setup(c => c.Request.Form).Returns(delegate() 
    { 
     var nv = new NameValueCollection(); 
     nv.Add("FirstName", "John"); 
     nv.Add("LastName", "Smith"); 
     nv.Add("Email", "[email protected]"); 
     nv.Add("Comments", "Comments are here..."); 
     nv.Add("ReceiveUpdates", "true"); 
     return nv; 
    }); 

    httpContext.Setup(c => c.Request.Path).Returns("/Subscription/SendEmail"); 

    var subscriptionViewModel = new Mock<ISubscriptionViewModel>(); 

    subscriptionViewModel.Setup(h => h.HttpContext).Returns(httpContext.Object); 

    subscriptionViewModel.Setup(h => h.FirstName).Returns(httpContext.Object.Request.Form["FirstName"]); 
    subscriptionViewModel.Setup(h => h.LastName).Returns(httpContext.Object.Request.Form["LastName"]); 
    subscriptionViewModel.Setup(h => h.Email).Returns(httpContext.Object.Request.Form["Email"]); 
    subscriptionViewModel.Setup(h => h.Comments).Returns(httpContext.Object.Request.Form["Comments"]); 
    subscriptionViewModel.Setup(h => h.InvestmentUpdates).Returns(bool.Parse(httpContext.Object.Request.Form["ReceiveUpdates"])); 

    var subscriptionController = new SubscriptionController(subscriptionViewModel.Object); 

    var result = subscriptionController.SendEmail(subscriptionViewModel.Object); 

    Assert.AreEqual(((ViewResult)result).ViewName, "Index"); 

} 
संबंधित मुद्दे