एक, एक है कि एक अजाक्स अनुरोध में कहा जाता है की जा रही है, लौटा रहा है एक यूआरएल उपयोग करती हैं इसलिए एक पुनर्निर्देशन कर सकते हैं। मैं Url.RouteUrl(..)
उपयोग कर रहा हूँ और मेरी इकाई परीक्षण के दौरान इस विफल रहता है के बाद से Controller.Url
पैरामीटर पहले से भर नहीं है।ASP.NET MVC: इकाई परीक्षण नियंत्रकों कि UrlHelper
मैं बहुत कुछ करने की कोशिश की, UrlHelper
(जो विफल) ठूंठ करने का प्रयास कर अन्य लोगों के अलावा, मैन्युअल रूप से एक RequestContext
है कि एक टोंटदार HttpContextBase
(जो एक RouteCollection.GetUrlWithApplicationPath
फोन पर विफल रही है) के साथ एक UrlHelper
बनाने।
मैं गूगल खोज की, लेकिन वास्तव में इस विषय पर कुछ भी नहीं पाया है। क्या मैं अपने नियंत्रक कार्रवाई में Url.RouteUrl
का उपयोग करके अविश्वसनीय रूप से बेवकूफ कर रहा हूं? क्या कोई आसान तरीका है?
इसे और भी खराब बनाने के लिए, मैं अपने यूनिट परीक्षण में लौटाए गए यूआरएल का परीक्षण करने में सक्षम होना चाहता हूं - असल में मुझे केवल यह जानने में दिलचस्पी है कि यह सही रास्ते पर रीडायरेक्ट कर रहा है, लेकिन जब से मैं लौट रहा हूं एक मार्ग के बजाय यूआरएल, मैं यूआरएल है कि संकल्प लिया नियंत्रित करने के लिए चाहते हैं (उदाहरण के लिए एक टोंटदार RouteCollection
का उपयोग करके।) - लेकिन मैं अपने परीक्षण के साथ शुरू गुजर पाने के लिए खुशी होगी।
var routes = new RouteCollection();
MvcApplication.RegisterRoutes(routes);
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.SetupGet(x => x.ApplicationPath).Returns("/");
request.SetupGet(x => x.Url).Returns(new Uri("http://localhost/a", UriKind.Absolute));
request.SetupGet(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
response.Setup(x => x.ApplyAppPathModifier("/post1")).Returns("http://localhost/post1");
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.SetupGet(x => x.Request).Returns(request.Object);
context.SetupGet(x => x.Response).Returns(response.Object);
var controller = new LinkbackController(dbF.Object);
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);
उस समय के लिए जब मैं एक समाधान के साथ गया जहां मैंने UrlHelper को कॉल को समेकित किया ताकि मैं उन्हें रोक सकूं। हालांकि, आपके स्निपेट के लिए धन्यवाद, यह मुझे बहुत समय बचाएगा कि यह पता लगाने के लिए कि एक अनुरोध/प्रतिक्रिया/नियंत्रक कॉन्टेक्स्ट सही तरीके से नकल कैसे करें। – efdee
उत्तर @ eu-ge-ne के लिए धन्यवाद, इससे मुझे बहुत मदद मिली। मैंने UpdateModel – woopstash
+1 उत्कृष्ट द्वारा उपयोग किए गए फॉर्मकोलेक्शन पैरामीटर का उपयोग करने के लिए कुछ और moq सेटअप शामिल किए हैं। एक टिप हालांकि: मैं एक MockHelper के रूप में उपयोग करने के लिए और इस ApplyAppPathModifier के लिए response.Setup बदलने के लिए: response.Setup (x => x.ApplyAppPathModifier (Moq.It.IsAny()))।रिटर्न ((स्ट्रिंग यूआरएल) => यूआरएल); यह बदसूरत है, लेकिन मुझे सीरियलाइज्ड ऑब्जेक्ट वापस यूआरएल एन्कोडेड फॉर्म में मिलता है, बदले गए मूल्य को हार्डकोड करने की बजाय। –
eduncan911