2012-07-26 6 views
7

मैं एएसपीनेट वेबएपीआई नियंत्रकों के कुछ एकीकरण परीक्षण करने के लिए एनयूनीट का उपयोग करके एक परीक्षण स्थापित करने की कोशिश कर रहा हूं। मुझे HttpServer का उपयोग करके इन-मेमोरी होस्टिंग पर चर्चा करने वाले कुछ लेख मिल गए हैं जो सब कुछ होस्ट करने वाले वेब सर्वर की आवश्यकता नहीं है, चीजों को सरल बनाने के लिए प्रतीत होता है।एएसपी.NET वेबएपीआई नियंत्रकों के साथ एकीकरण परीक्षण करने के लिए एनयूनीट का उपयोग

समस्या केवल प्रतिक्रिया मैंने कभी मिलता है 404-नहीं मिला है।

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

अग्रिम धन्यवाद।

यहाँ परीक्षण वर्ग

[TestFixture] 
public class InMemoryTests 
{ 
    private HttpServer Server; 
    private string UrlBase = "http://some.server/"; 

    [TestFixtureSetUp] 
    public void Setup() 
    { 

     var config = new HttpConfiguration(); 
     config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); 
     config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

     Server = new HttpServer(config); 
    } 

    [Test] 
    public void GetOrderStatus() 
    { 
     var client = new HttpClient(Server); 
     var request = createRequest("api/Orders/GetOrderStatus?companyCode=001&orderNumber=1234", "application/json", HttpMethod.Get); 

     using (HttpResponseMessage response = client.SendAsync(request).Result) 
     { 
      Assert.IsNotNull(response); 
      Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); 
      Assert.NotNull(response.Content); 
     } 
    } 

    private HttpRequestMessage createRequest(string url, string mthv, HttpMethod method) 
    { 
     var request = new HttpRequestMessage(); 

     request.RequestUri = new Uri(UrlBase + url); 
     request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv)); 
     request.Method = method; 

     return request; 
    } 

    private HttpRequestMessage createRequest<T>(string url, string mthv, HttpMethod method, T content, MediaTypeFormatter formatter) where T : class 
    { 
     HttpRequestMessage request = createRequest(url, mthv, method); 
     request.Content = new ObjectContent<T>(content, formatter); 

     return request; 
    } 

    public void Dispose() 
    { 
     if (Server != null) 
     { 
      Server.Dispose(); 
     } 
    } 
} 
+0

यह ठीक लग रहा है। नियंत्रक को देखे बिना कहना मुश्किल है। क्या आप इस क्रिया/एपीआई/ऑर्डर/GetOrderStatus के लिए परिभाषा पोस्ट कर सकते हैं? CompanyCode = 001 और orderNumber = 1234? –

+0

नियंत्रक के बारे में वास्तव में कुछ खास नहीं है। मैन्युअल रूप से परीक्षण करते समय यह सब काम करता है। इसके अलावा मुझे एक ही परिणाम मिलता है इससे कोई फर्क नहीं पड़ता कि मैं कौन सा नियंत्रक परीक्षण करता हूं। – Rick

उत्तर

8

मैं भी इस समस्या को देख रहा था, दूर जाना जब मैं अपने नियंत्रक के रूप में एक ही विधानसभा में अपने परीक्षण वर्ग ले जाया गया लग रहा था है, आम तौर पर मुझे पता है परीक्षण के लिए व्यावहारिक नहीं है।

कुछ खोदने के बाद ऐसा लगता है कि एक बग है जो केवल स्वयं होस्ट के साथ होता है जब कॉलिंग कोड नियंत्रक के समान असेंबली साझा नहीं करता है क्योंकि यह आवश्यक असेंबली लोड करने में कामयाब नहीं होता है।

इससे आपकी समस्या/अस्थायी रूप से वैकल्पिक हल अपने परीक्षण की पहली पंक्ति के रूप में जोड़ना है पुष्टि करने के लिए: -

Type myType = typeof(myControllerType); 

अधिक जानकारी पर: http://forums.asp.net/t/1772734.aspx/1

+0

अपने उत्तर को सही के रूप में चिह्नित करें। मैंने एएसपीनेट मंचों पर भी अपना प्रश्न पोस्ट किया था और एक ही जवाब मिला। मुझे थोड़ा और काम करना पड़ा क्योंकि मुझे यह भी सुनिश्चित करना था कि आपके नियंत्रकों द्वारा आवश्यक सभी निर्भरताएं उपलब्ध हैं (डुह!) Http://forums.asp.net/t/1829098.aspx/1?Using+HttpServer+to + प्रदर्शन + एकीकरण + परीक्षण + के साथ + NUnit – Rick

+0

यह मामला क्यों है? मेरे पास यह भी था जहां मैंने एक ही असेंबली में परीक्षण विधि डाली, लेकिन अगर मैंने इसे कहीं और रखा, जैसे कि परीक्षण परियोजना में, यह काम नहीं करेगा। – appsecguy

+0

यह मुद्दा पिछले दो दिनों से मुझे परेशान कर रहा है। आपका धन्यवाद!!! – Jethro

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