कस्टम हैंडलर के साथ यूनिट परीक्षण वेबएपी मार्ग

मुझे मार्गों का परीक्षण करने में समस्या आ रही है और मुझे लगता है कि यह एक कस्टम हैंडलर का उपयोग कर मार्ग के कारण है।

This question points to a similar issue, but doesn't quite fix what I'm doing.

मेरे पास एक रूट कॉन्फ़िगरेशन क्लास है जो केवल रूट परिभाषाओं को रखती है ताकि मुझे उन्हें एप्लिकेशन के साथ-साथ किसी भी परीक्षण दिनचर्या में खींच सकें:

// the route
ApiRoutes.MapHttpRoute(
    name: "Custom",
    routeTemplate: "api/service/{service}/{method}/{arguments}",
    defaults: new { arguments = RouteParameter.Optional },
    constraints: null,
    handler: new ServiceDispatcher(_httpConfiguration, _controllerHelper)
);

अब एक समान का उपयोग करके इसका परीक्षण करने का प्रयास करते समय मार्ग के लिए पैटर्न] मार्ग का मज़ाक उड़ाते हुए मार्ग (404) नहीं मिलता है। चयन भाग इस तरह दिखता है ( यह आलेख दिखाया नहीं गया है):

HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/service/foo/bar/foobar");
DefaultHttpControllerSelector controllerSelector = new DefaultHttpControllerSelector(configuration);
HttpControllerDescriptor descriptor = controllerSelector.SelectController(message);

मेरा (शिक्षित?) अनुमान है कि यह DefaultHttpControllerSelector है, लेकिन मुझे नहीं पता कि मैं क्या कर रहा हूं इसका समर्थन करने के लिए इसे कैसे बदला जा सकता है या नहीं।

तो, क्या मैं कस्टम हैंडलर का उपयोग करके यह वर्तमान नियमित काम कर सकता हूं या क्या मैं गलत पेड़ को भड़क रहा हूं?

1
@ किरण चल्ला मुझे वास्तव में वह हिस्सा मिला है। 404 को फेंक दिया जाता है जब GetActionName() GetControllerType() को कॉल करता है जो _controllerSelector.SelectController() को कॉल करता है। जबकि मैं इसे आज़माता हूं और हल करता हूं, मैं रूटिंग के माध्यम से मार्ग का परीक्षण करने के बजाय मार्ग का परीक्षण करने के लिए वापस लौटा दूंगा।
जोड़ा लेखक Phil Cooper, स्रोत
अपने कोड को देखते हुए, ऐसा लगता है कि आपने मार्ग मिलान के माध्यम से अनुरोध नहीं चलाया है ... यदि आप फिलिप की पोस्ट देखते हैं, तो इसमें रूटटेस्टर नामक कुछ है और यह config.Routes.GetRouteData (अनुरोध) जैसे कॉल करता है; ... यह कॉल मार्ग मिलान तर्क से निकलती है ... नियंत्रक चयनकर्ता नियंत्रक का चयन करने के लिए वर्तमान अनुरोध में रूट डेटा पर निर्भर करता है और चूंकि मार्ग डेटा नहीं है, तो आप यह व्यवहार देख रहे हैं ..
जोड़ा लेखक Kiran Challa, स्रोत

1 उत्तर

जब आपके पास मार्ग से जुड़े संदेश हैंडलर होते हैं, तो नियंत्रक प्रेषक को कभी भी बुलाया नहीं जाता है। यह अब तक नहीं मिलता है। यदि आप मार्गों का परीक्षण करना चाहते हैं, तो मैं बस कॉल करूंगा

    var routeDate = config.Routes.GetRouteData(request);

फिर आप मार्ग मानों की जांच कर सकते हैं और सेवा, विधि और तर्क पैरामीटर के लिए परीक्षण कर सकते हैं।

1
जोड़ा
शानदार, यह वह ज्ञान था जिसे मैं याद कर रहा था। मैंने रूट डेटा के साथ काम करने के लिए परीक्षण को सरल बना दिया है और यह काम कर रहा है। IHttpRouteData ShouldHave (यह IHttpRouteData मार्ग, स्ट्रिंग कुंजी, ऑब्जेक्ट मान) - आपके समय के लिए धन्यवाद।
जोड़ा लेखक Phil Cooper, स्रोत
@ फिल कूपर हां, यह बिल्कुल स्पष्ट नहीं है कि निर्दोष <कोड> GetRouteData विधि वास्तव में सभी मार्ग मिलान करता है और कोई मार्ग नहीं मिलने पर शून्य हो जाता है।
जोड़ा लेखक Darrel Miller, स्रोत
QAIndia
QAIndia
160 प्रतिभागियों की

QA India ! Unite Here we share job postings , prepare for interviews and share tips/techniques in QA. Please follow following guideline while sharing any job ... QA job # location : # title Company : Title : Requirement: Responsibility: Apply: