दिलचस्प पोस्ट
मैं जीआईटी रेपो से एक फाइल कैसे हटा सकता हूं? मैं रूट विशेषाधिकारों के बिना पर्ल मॉड्यूल कैसे स्थापित कर सकता हूं? अजगर: बिना यूनिकोड यूनिकोड को एएससीआई के लिए परिवर्तित करें प्रतिशत साइन इन बैच फ़ाइल को अनदेखा करें एक एसएसएच रिमोट कमान कम पर्यावरण चर क्यों मिलता है, जब मैन्युअल रूप से चलाते हैं? टी-एसक्यूएल पायवोट? पंक्ति मानों से तालिका स्तंभ बनाने की संभावना पायथन जोरदार टाइप किया गया है? कैसे एक आदेश को निष्पादित करें और सी + + के भीतर सी + + के आउटपुट को POSIX का उपयोग करें? एक बाइट सरणी से सी # में C / C ++ डेटा संरचना पढ़ना Tensorflow: कैसे एक मॉडल को बचाने / बहाल करने के लिए? UIBezierPath से अंक की सूची कैसे प्राप्त करें? पायथन नियमित अभिव्यक्ति – एक वाइल्डकार्ड अभिव्यक्ति से कई समूहों को कैसे कैप्चर करना है? एंड्रॉइड एडीबी टूल का इस्तेमाल करते हुए एक आवेदन कैसे शुरू करें? Console.log क्या है? सी # में स्थिर कक्षाओं का उपयोग कब करना है

ASP.NET MVC: यूनिट परीक्षण नियंत्रक जो UrlHelper का उपयोग करते हैं

मेरे नियंत्रक कार्यों में से एक, जो कि अजाक्स अनुरोध में बुलाया जा रहा है, क्लाइंट की तरफ एक यूआरएल लौटा रहा है, ताकि वह रीडायरेक्शन कर सके। मैं Url.RouteUrl(..) का उपयोग कर रहा हूं Url.RouteUrl(..) और मेरी यूनिट परीक्षणों के दौरान ये विफल रहता है क्योंकि Controller.Url Url.RouteUrl(..) पैरामीटर पूर्व-भरी नहीं है।

मैंने RouteCollection.GetUrlWithApplicationPath (जो विफल हुआ) के प्रयास में बहुत सी चीजों की कोशिश की, मैन्युअल रूप से एक RouteCollection.GetUrlWithApplicationPath हुए एक RouteCollection.GetUrlWithApplicationPath (जो RouteCollection.GetUrlWithApplicationPath पर विफल हुआ। RouteCollection.GetUrlWithApplicationPath कॉल) है।

मैंने Google की खोज की है लेकिन इस विषय पर लगभग कुछ नहीं पाया। क्या मैं कुछ नियंत्रण कर रहा हूँ अविश्वसनीय रूप से बेवकूफ़ Url.RouteUrl का उपयोग कर रहा हूँ। Url.RouteUrl मेरी नियंत्रक की कार्रवाई में है? क्या कोई आसान तरीका है?

इससे भी बदतर बनाने के लिए, मैं अपने यूनिट परीक्षण में लौटा यूआरएल का परीक्षण करने में सक्षम होना चाहता हूं – वास्तव में मुझे यह जानने में दिलचस्पी है कि यह सही मार्ग पर पुनः निर्देशित है, लेकिन जब से मैं एक यूआरएल के बजाय एक यूआरएल लौट रहा हूं मार्ग, मैं हल किया गया यूआरएल को नियंत्रित करना चाहता हूं (उदाहरण के लिए RouteCollection का प्रयोग करके) – लेकिन मुझे अपने परीक्षण से शुरू करने के लिए गुजरने में खुशी होगी।

वेब के समाधान से एकत्रित समाधान "ASP.NET MVC: यूनिट परीक्षण नियंत्रक जो UrlHelper का उपयोग करते हैं"

यहाँ मेरे परीक्षणों में से एक है (xUnit + Moq) सिर्फ इसी तरह के मामले के लिए (यूआरएल का उपयोग कर। रूटयूयूएल नियंत्रक में)

उम्मीद है की यह मदद करेगा:

 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 को कॉल का परीक्षण कर रहे हैं तो आप क्या चाहते हैं।

 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>(); 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); 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 NameValueCollection()); response.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(x => x); context.SetupGet(x => x.Request).Returns(request.Object); context.SetupGet(x => x.Response).Returns(response.Object); var routes = new RouteCollection(); MvcApplication.RegisterRoutes(routes); var helper = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes); 

यह पोस्ट उपयोगी हो सकती है यदि आप HttpContextBase कक्षा को नकली करना चाहते हैं।

http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

@ ईयू-जी-ने ने जवाब का निर्माण किया जिससे मुझे एक महान सौदा मिला:

मेरे पास एक एक्शनआरसल्ट था जिसने एक रीडायरेक्ट के साथ ही एक FormCollection पैरामीटर के साथ अपडेटमोडेल कॉल किया था। काम करने के लिए UpdateModel () के लिए मुझे इसे मेरे Mocked HttpRequestBase में जोड़ना था:

 FormCollection collection = new FormCollection(); collection["KeyName"] = "KeyValue"; request.Setup(x => x.Form).Returns(collection); request.Setup(x => x.QueryString).Returns(new NameValueCollection()); 

यह जांचने के लिए कि पुनर्निर्देशित यूआरएल सही था, आप निम्न कर सकते हैं:

 RedirectResult result = controller.ActionName(modelToSubmit, collection) as RedirectResult; Assert.AreEqual("/Expected/URL", result.Url); 

http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html चर्चा करता है कि यूनिट परीक्षणों के साथ सभी परतों को कैसे कवर किया जाता है। यह नियंत्रकों परीक्षण के लिए राइनो और एमवीसी। कंटेंट का उपयोग करता है। गूगल पर स्रोत कोड एक महान मदद की हो सकती है