2015-11-10 16 views
6

में एक mulitpart/मिश्रित फॉर्म अनुरोध बनाना मैं एक वेब एपीआई एंडपॉइंट पर काम कर रहा हूं जो एक पोस्ट के रूप में मल्टीपार्ट/मिश्रित संदेशों को स्वीकार करेगा। जिस मुद्दे का मैं सामना कर रहा हूं वह यह है कि यूनिट परीक्षण में ऐसे अनुरोध को कैसे नकल करना है?इकाई परीक्षण

API पद्धति की मूल है: अपने परीक्षण में पोस्ट कॉल करने से पहले

public HttpResponseMessage Post(){ 
    var parsedContent=Request.Content.ReadAsMultipartAsync().Result; 
    foreach(var item in parsedContent.Contents) { 
     switch(item.Headers.ContentType.MediaType){ 
      case "application/json": 
       doSomething(item); 
       break; 
      case "text/plain": 
       doSomethingElse(item); 
       break; 
      case "application/pdf": 
       doAnotherThing(item); 
       break; 
      case "image/png": 
       doYetAnotherThing(item); 
       break; 
     } 
    } 
    //return status message based on results of previous calls... 
} 

मैं जानता हूँ कि मैं अनुरोध वस्तु बनाने और इसे में अपने परीक्षण की स्थिति बीज के है, और नियंत्रक,। मुझे ReadAsMultipartAsync() कॉल के लिए मल्टीपार्ट सामग्री को सही रूप में प्राप्त करने का सही तरीका है जो सॉर्टिंग में परेशानी हो रही है।

मैंने इस विधि को एकसाथ पाई है, और उपरोक्त नियंत्रक में खिलाए जाने पर अनुरोध को सही तरीके से स्वीकार किया जाता है और पार्स किया जाता है। हालांकि, एक ब्रेक पॉइंट सेट करना और अनुरोध ऑब्जेक्ट का निरीक्षण करना बहुत अलग दिखता है जब इस टेस्ट बनाम द्वारा निर्मित फिडलर और पाइपलाइन के माध्यम से आने से उत्पन्न होता है। पाइपलाइन में System.Web.Http.WebHost.HttpControllerHandler.LazyStreamContent की सामग्री है जबकि परीक्षण डीबग System.Net.Http.MultipartContent है।

public static HttpRequestMessage CreateMixedPostRequest(string url, IEnumerable<HttpContent> contentItems) { 
    var request=new HttpRequestMessage(HttpMethod.Post, url); 
    var content=new MultipartContent("mixed"); 
    foreach(var item in contentItems) { 
     content.Add(item); 
    } 
    request.Content=content; 
    return request; 
} 

मुझे लगता है कि मुझे चिंता है कि इस तकनीक क्योंकि परीक्षण पाइपलाइन के स्वरूप में ही नियंत्रक से बातें खिला नहीं है जब होगा इस जीवंत होने पर सुरक्षा की झूठी भावना को बढ़ावा मिलेगा हूँ। क्या मेरे परीक्षणों के अनुरोधों का निर्माण करने का कोई बेहतर तरीका है? या मैं अत्यधिक भयावह हूं, और यह मेरे परिदृश्य के लिए एक व्यवहार्य विकल्प है?

संपादित करें: हम उस बिंदु तक पहुंच गए हैं जहां हम बाहरी कोड से इस एंडपॉइंट का परीक्षण करने की कोशिश कर रहे हैं और हम LazyStream और Multipart के बीच महत्वपूर्ण प्रदर्शन अंतर देख रहे हैं। आंतरिक परीक्षण के रूप में एक ही डेटा जमा करते समय बाहरी कोड को आमतौर पर टाइमआउट प्राप्त होता है।

उत्तर

1

यूनिट परीक्षण का उद्देश्य यह सुनिश्चित करना है कि एक बार जब आप डेटा प्राप्त कर लें तो आपका कोड सही तरीके से व्यवहार कर रहा है। आप सुरक्षित रूप से यह मान सकते हैं कि पाइप सही तरीके से काम करेगा, यह मानते हुए कि आप समझते हैं कि पाइपलाइन कैसे काम करती है। मैं आपके यूनिट परीक्षणों को उस फैशन में जारी रखूंगा जो आपने निर्धारित किया है, और फिर यह सुनिश्चित करने के लिए कि कुछ पाइपलाइन अपेक्षित काम कर रही है, कुछ लाइव एकीकरण परीक्षणों का पालन करें। एकीकरण परीक्षण एक सत्यापन परीक्षण सूट के हिस्से के रूप में चलाया जा सकता है जो प्रत्येक बिल्ड के साथ जरूरी नहीं है, क्योंकि यह पाइपलाइन की कार्यक्षमता के बारे में आपकी धारणाओं की पुष्टि है।

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