2009-01-06 12 views
10

मैं एक ऐसा एप्लिकेशन बना रहा हूं जो वेब सेवा से पूछताछ करे। डेटाबेस में डेटा बदलता है और समय के साथ बदलता है। मैं इस प्रकार के आवेदन के लिए यूनिट टेस्ट कैसे बना सकता हूं?परिणाम अलग होने पर आप यूनिट परीक्षण कैसे करते हैं?

वेब सेवा xml या कोई खोज परिणाम HTML पृष्ठ भेजता है। मैं वास्तव में वेब सेवा नहीं बदल सकता। मेरा आवेदन मूल रूप से HTTPURL कनेक्शन का उपयोग कर वेब सेवा से पूछताछ करता है और प्रतिक्रिया को स्ट्रिंग के रूप में प्राप्त करता है।

आशा है कि अधिक जानकारी के साथ मदद करता है।

उत्तर

26

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

जावा मॉकिंग के लिए jMock पर देखें।

+0

+1: नकली वस्तुएं इंटरफेस के बारे में सभी संदेह को हटा देती हैं। –

+0

मैंने वेब सेवा का मज़ाक उड़ाने के बारे में भी सोचा नहीं था। यह जाने के मार्ग की तरह लगता है। – kevindaub

3

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

मैं सामान्य रूप से बदलने के लिए नहीं, या कम से कम एक सीमा के भीतर होना करने के लिए एक इकाई के परीक्षण के परिणाम है कि आप

3

उम्मीद कर रहे हैं उम्मीद करेंगे आपका प्रश्न है एक छोटे से ओपन एंडेड लेकिन वहाँ निश्चित रूप से कुछ परीक्षण योग्य विकल्प हैं बस ऊपर जानकारी का उपयोग:

  1. आप परीक्षण कर सकते हैं कि क्या क्वेरी बिल्कुल काम करता है। मान लें कि आपको एक गैर-खाली/गैर-शून्य परिणाम सेट वापस लेना चाहिए।
  2. आप जांच सकते हैं कि क्वेरी परिणाम मान्य परिणाम सेट है या नहीं। मान लें कि परिणाम आपके सत्यापन कोड को पारित करना चाहिए (इसलिए इस बिंदु पर, आप जानते हैं कि डेटा गैर-शून्य है, न कि गैर-संवेदी और संभवतः उपयोगी)।
  3. यदि आप डेटा स्कीमा/डेटा विवरण के बारे में कुछ भी जानते हैं, तो आप जोर दे सकते हैं कि फ़ील्ड एक-दूसरे के संबंध में समझदार हैं। उदाहरण के लिए, यदि आपको हेलीकॉप्टर के साथ परिणाम मिलता है, तो इसे नकारात्मक 100 मीटर की ऊंचाई से जोड़ा नहीं जाना चाहिए ....
  4. यदि आप डेटा की संभाव्य वितरण के बारे में कुछ भी जानते हैं, तो आप एकत्र करने में सक्षम होना चाहिए डेटा का एक सेट और जोर देकर कहते हैं कि आपका परिणामी वितरण उस मानक विचलन के भीतर है जिसे आप देखना चाहते हैं।

मुझे यकीन है कि कुछ और जानकारी के साथ, आपको उपयोगी सुझावों का ढेर मिल जाएगा।

6

यूनिट-परीक्षण की कड़ाई से बोलते हुए, आप केवल उन इकाइयों का परीक्षण कर सकते हैं जिनके पास निर्धारक व्यवहार है।

बाहरी वेब सर्वर से कनेक्ट होने वाला एक परीक्षण एकीकरण परीक्षण है।

समाधान HTTPURLConnection का नकल करना है - यानी, अपने यूनिट परीक्षणों में एक वर्ग बनाएं जो HTTPURLConnection क्लास से प्राप्त होता है और जो हार्डकोडेड या पैरामीटरज़ेबल मान देता है। संपादित करें: ध्यान दें कि बिना किसी मॉकिंग फ्रेमवर्क के इसे मूनली किया जा सकता है।

वेब सर्वर से पूछताछ करने वाली कक्षा HTTPURL कनेक्शन को कम नहीं करेगी, लेकिन इसे पैरामीटर के माध्यम से प्राप्त करेगी। यूनिट परीक्षणों में, आप HTTPURLConnectionMock बनाते हैं, और उस क्लास को पास करते हैं जो वेब सर्वर से पूछताछ करता है जो इसका उपयोग करेगा क्योंकि यह वास्तविक HTTPURL कनेक्शन का उपयोग कर रहा है। उत्पादन कोड में, आप एक वास्तविक HTTPURL कनेक्शन बनाते हैं और इसे कक्षा में पास करते हैं।

आप अपने HTTPURLConnectionMock को IOException फेंकने में सक्षम कर सकते हैं, परीक्षण त्रुटि शर्तों पर। बस यह बताने के लिए एक तरीका है कि परिणाम न लौटाए लेकिन अगले अनुरोध पर अपवाद।

+0

एक और अधिक गहन उत्तर के लिए धन्यवाद। – kevindaub

1

एक समस्या जिसे मैंने चलाया है, समेकित (अर्थात् "क्रैपी") डेटामैडल्स के साथ है, जहां आप कभी भी यह सुनिश्चित नहीं कर सकते कि समस्याएं कोड त्रुटियों या डेटा त्रुटियों के कारण हैं।

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

+0

बहुत सच है। मुझे लगता है कि यही कारण है कि आपको 1 से अधिक प्रकार के सत्यापन की आवश्यकता है: यूनिट परीक्षण और एकीकरण परीक्षण। – kevindaub

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