2008-12-16 17 views
11

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

http://msdn.microsoft.com/en-us/library/ms243399(VS.80).aspx#TestingWebServiceLocally

फिर भी, यह परीक्षण को क्रियान्वित करने के बिना पूरा हो जाएगा। मैंने WebServiceHelper.TryUrlRedirection(...) पर कॉल जोड़ने का प्रयास किया लेकिन कॉल को लक्ष्य पसंद नहीं आया क्योंकि यह WebService से प्राप्त हुआ है, WebClientProtocol नहीं।

+1

वेब सेवा के लिए आप किस परियोजना प्रकार का उपयोग कर रहे हैं? क्या यह एक डब्ल्यूसीएफ एएसएमएक्स है? क्या यह वेबसाइट या वेब एप्लिकेशन – JoshBerke

+0

है यह डब्ल्यूसीएफ नहीं है। यह सिर्फ एक सामान्य एएसएमएक्स वेब सेवा है। –

उत्तर

24

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

+0

ग्रेट उत्तर। अगर मैं कर सकता तो मैं आपको और अधिक दे दूंगा। यह दुर्भाग्यपूर्ण है कि सबसे बड़ी चीज बनाने के लिए .asmx webservices परीक्षण करने में कठोर तथ्य यह है कि पूरी विधि [वेब सेवा] के साथ सजाया गया है (जो विधि को एक webservice विधि के रूप में निर्दिष्ट करता है) एक इंटरफ़ेस बनाना और नकली वर्ग काम नहीं करता है। एक "नकली" प्राप्त करना काम नहीं करता है। डोरन का सुझाव सबसे आसान तरीका प्रतीत होता है। मजेदार बात यह है कि जब मैं एक टेस्टेबल क्लास में कार्यक्षमता निकालता हूं तो मैं अक्सर कक्षा को एक सेवा कहता हूं। तो मैंने जो बनाया है वह वास्तव में एक वेब सेवा के लिए एक सेवा है। आप इमेजिंग कर सकते हैं कि वर्ग का नाम कैसा दिखता है :) – SideFX

1

आप अपने इकाई परीक्षण परियोजना के लिए एक सेवा संदर्भ जोड़ने के लिए या अपने ग्राहक ठूंठ पैदा करते हैं और अपने इकाई परीक्षण परियोजना में वर्ग डाल सकते हैं।

+0

हाँ, मैंने ऐसा किया।मैं बस उत्सुक था कि आपको इसे "माइक्रोसॉफ्ट तरीका" कैसे करना था। एकेए जिस तरह से एमएसडीएन दस्तावेज़ निर्दिष्ट करते हैं और यूनिट परीक्षण कैसे स्वचालित रूप से उत्पन्न होता है। –

+0

मेरी बुराई मैंने उस हिस्से को याद किया। मैं हमेशा अपनी वेब सेवाओं के कार्यान्वयन को जितना संभव हो उतना छोटा रखता हूं और अपनी वस्तुओं का परीक्षण बहुत आसान करता हूं ;-) – JoshBerke

8

आप एक वेब सेवा लिख ​​रहे हैं, तो एक और (परीक्षण योग्य) परत में सभी तर्क डाल करने के लिए प्रयास करें। प्रत्येक वेब विधि में जितना संभव हो उतना छोटा कोड होना चाहिए। फिर आपके पास वेब विधि का परीक्षण करने का कोई कारण नहीं होगा क्योंकि आप अंतर्निहित परतों का परीक्षण कर सकते हैं।

[WebMethod] 
public void DoSomething() 
{ 
    hander.DoSomething(); 
} 

आप एक वेब विधि उपभोग कर रहे हैं, तो एक वर्ग आवरण में उत्पन्न फोन करने वाले लपेट, और कक्षा आवरण के लिए एक इंटरफेस को लागू। फिर, जब भी आपको वेब सेवा कॉल करने की आवश्यकता होती है, तो विधि को कॉल करने के लिए इंटरफ़ेस का उपयोग करें। आप इंटरफ़ेस का उपयोग करना चाहते हैं ताकि कक्षा के रैपर को परीक्षण के दौरान स्वीकार्य बनाया जा सके (राइनो मोक्स, मोक, या टाइपमॉक का उपयोग करके)।

0

ऊपर अपने वेब विधि इकाई परीक्षण, मैं निम्नलिखित है:

// TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example, 
// http://.../Default.aspx). This is necessary for the unit test to be executed on the web server, 
// whether you are testing a page, web service, or a WCF service. 
[HostType("ASP.NET")] 
[UrlToTest("http://localhost/MyWebService")] 

सामान्य के अलावा:

[TestMethod()] 
[DeploymentItem("MyWebService.dll")] 

इस कोड को विजुअल स्टूडियो 2008 यूनिट टेस्ट जादूगर का उपयोग करने से के बारे में आया था।

0

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

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

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