विफलता के मामले का एक उदाहरण जिसे आप पकड़ने के लिए पूर्व निर्धारित करेंगे, वह यह है कि परीक्षण के तहत वस्तु एक कैशिंग परत का उपयोग करती है, लेकिन आवश्यक डेटा को जारी रखने में विफल रहती है। फिर यदि आप ऑब्जेक्ट को क्वेरी करते हैं तो यह कहेंगे "हाँ, मुझे नया नाम और पता मिल गया है", लेकिन आप चाहते हैं कि परीक्षण विफल हो जाए क्योंकि यह वास्तव में वह नहीं किया है जो इसे करना चाहिए था।
वैकल्पिक रूप से (और एकल-जिम्मेदारी के उल्लंघन को देखते हुए), मान लीजिए कि स्ट्रिंग के UTF-8-एन्कोडेड संस्करण को बाइट-ओरिएंटेड फ़ील्ड को बनाए रखने के लिए आवश्यक है, लेकिन वास्तव में शिफ्ट JIS बनी रहती है। कुछ अन्य घटक डेटाबेस को पढ़ने जा रहे हैं और यूटीएफ -8 को देखने की उम्मीद करते हैं, इसलिए आवश्यकता है। फिर इस ऑब्जेक्ट के माध्यम से राउंड-ट्रिप सही नाम और पते की रिपोर्ट करेगा क्योंकि यह इसे शिफ्ट JIS से वापस बदल देगा, लेकिन त्रुटि आपके परीक्षण से नहीं मिली है। यह उम्मीद है कि कुछ बाद के एकीकरण परीक्षण द्वारा पता लगाया जाएगा, लेकिन इकाई परीक्षणों का पूरा बिंदु समस्याओं को जल्दी पकड़ना है, और ठीक से पता है कि घटक क्या जिम्मेदार है।
यदि उनमें से एक ऐसा नहीं कर रहा है जो इसे माना जाता है, तो इसका अपना परीक्षण मामला विफल हो जाएगा और हम इसे ठीक कर सकते हैं और परीक्षण बैटरी को फिर से चला सकते हैं।
आप इसे नहीं मान सकते हैं, क्योंकि यदि आप सावधान नहीं हैं तो आप परीक्षणों के परस्पर निर्भर सेट लिखते हैं। "क्या यह बचाता है?" परीक्षण उस परीक्षण विधि को कॉल करता है जिसे वह परीक्षण कर रहा है, और फिर इसे सहेजने की पुष्टि करने के लिए लोड विधि। "यह लोड करता है?" परीक्षण परीक्षा पद्धति को परीक्षण स्थिरता स्थापित करने के लिए कॉल करता है और फिर परिणाम की जांच करने के लिए परीक्षण विधि लोड करता है। दोनों परीक्षण उस विधि की शुद्धता पर निर्भर करते हैं जिसका वे परीक्षण नहीं कर रहे हैं, जिसका अर्थ है कि दोनों में से कोई भी वास्तव में परीक्षण की गई विधि की शुद्धता का परीक्षण नहीं करता है।
यहां जो समस्या है, वह यह है कि दो परीक्षण जो अलग-अलग इकाइयों का परीक्षण कर रहे हैं, वास्तव में एक ही काम करते हैं । वे दोनों एक गेट्टर के बाद एक सेटर कहते हैं, फिर परिणाम की जांच करें मूल मूल्य। लेकिन आप परीक्षण करना चाहते थे कि सेटर डेटा को बनाए रखता है, न कि यह कि सेटर / गेट्टर जोड़ी एक साथ काम करती है। तो आप कुछ गलत जानते हैं, आपको बस यह पता लगाना है कि परीक्षणों को क्या ठीक करना है।
यदि आपका कोड यूनिट परीक्षण के लिए अच्छी तरह से डिज़ाइन किया गया है, तो कम से कम दो तरीके हैं जिनसे आप परीक्षण कर सकते हैं कि क्या डेटा वास्तव में परीक्षण के तहत विधि द्वारा सही तरीके से बनाए रखा गया है:
डेटाबेस इंटरफ़ेस को मॉक करें, और आपके मॉक ने इस तथ्य को रिकॉर्ड किया है कि उस पर उचित फ़ंक्शन को अपेक्षित मानों के साथ बुलाया गया है। यह परीक्षण उस विधि को करता है जो इसे माना जाता है, और यह क्लासिक इकाई परीक्षण है।
डेटा को सही ढंग से बनाए रखा गया है या नहीं, इसे रिकॉर्ड करने के लिए इसे बिल्कुल उसी इरादे से एक वास्तविक डेटाबेस पास करें । लेकिन एक नकली फ़ंक्शन होने के बजाय जो कहता है कि "हाँ, मुझे सही डेटा मिला है", आपका परीक्षण सीधे डेटाबेस से वापस पढ़ता है और पुष्टि करता है कि यह सही है। यह सबसे शुद्ध संभव परीक्षण नहीं हो सकता है , क्योंकि एक संपूर्ण डेटाबेस इंजन एक गौरवशाली मॉक लिखने के लिए उपयोग करने के लिए काफी बड़ी बात है, मेरे पास कुछ सूक्ष्मता की अनदेखी करने का अधिक मौका है जो कुछ गलत होने पर भी परीक्षा पास करता है (उदाहरण के लिए इसलिए) पढ़ने के लिए उपयोग किए गए समान डेटाबेस कनेक्शन का उपयोग नहीं करना चाहिए, क्योंकि मैं लिखने के लिए उपयोग नहीं किया गया था, क्योंकि मैं एक बिना लेनदेन के देख सकता हूं)। लेकिन यह सही चीज़ का परीक्षण करता है, और कम से कम आप जानते हैं कि यह ठीक है किसी भी नकली कोड को लिखने के बिना पूरे डेटाबेस इंटरफ़ेस को लागू करता है!
इसलिए यह परीक्षण कार्यान्वयन का एक मात्र विवरण है कि क्या मैं जेडडीबीसी द्वारा परीक्षण डेटाबेस से डेटा पढ़ता हूं या क्या मैं डेटाबेस का मजाक उड़ाता हूं। किसी भी तरह से बिंदु यह है कि मैं इकाई को बेहतर तरीके से अलग करके परीक्षण कर सकता हूं यदि मैं इसे गलत तरीके से देखने के लिए एक ही वर्ग के अन्य गलत तरीकों के साथ अनुमति देता हूं, भले ही कुछ गलत हो। इसलिए मैं यह जांचने के लिए किसी भी सुविधाजनक साधन का उपयोग करना चाहता हूं कि सही डेटा को बनाए रखा गया था, उस घटक के भरोसे के अलावा जो मैं परीक्षण कर रहा हूं।
यदि आपका कोड यूनिट परीक्षण के लिए अच्छी तरह से डिज़ाइन नहीं किया गया है, तो आपके पास कोई विकल्प नहीं हो सकता है, क्योंकि जिस वस्तु की विधि आप परीक्षण करना चाहते हैं, वह डेटाबेस को इंजेक्शन की निर्भरता के रूप में स्वीकार नहीं कर सकता है। जिस मामले में यूनिट को परीक्षण के तहत अलग करने का सबसे अच्छा तरीका है, परीक्षण के तहत यूनिट को अलग करने के लिए कितना संभव है, इस बारे में एक चर्चा में बदल जाता है। निष्कर्ष समान है, हालांकि। यदि आप दोषपूर्ण इकाइयों के बीच साजिशों से बच सकते हैं, तो आप उपलब्ध समय के अधीन करते हैं, और कुछ और जो आप सोचते हैं कि कोड में दोष खोजने में अधिक प्रभावी होगा।