आप कोड के लिए परीक्षण कैसे लिखते हैं जो ठोस बाहरी कार्यान्वयन पर निर्भर करता है जिसे मजाक नहीं किया जा सकता है?


17

पृष्ठभूमि: मैं एक मॉड्यूल के लिए कुछ बनाकर अपने सहकर्मियों को इकाई परीक्षणों की अवधारणा को पेश करने की कोशिश कर रहा हूं, जिस पर मैं काम कर रहा हूं; इसकी आवश्यकताओं को हाल ही में बदल दिया गया है और इसके लिए कुछ और सार / इंटरैक्शन की आवश्यकता होती है, इसलिए यह परीक्षण के एक सूट को विकसित करने के लिए एक अच्छा तरीका लगता है, जो एप्लिकेशन के चारों ओर मैन्युअल रूप से प्रहार किए बिना "साबित" होगा।

हालाँकि, समस्या यह है कि मॉड्यूल पीडीएफ और एक्सएसएल जैसे अमूल्य बाहरी कारकों पर निर्भर करता है। मूल रूप से मैंने एक्सएमएल को डेटाबेस से पढ़ा और इसमें एक एक्सएसएल परिवर्तन लागू किया, फिर इसे एबीसीपीडीएफ नामक एक पुस्तकालय का उपयोग करके पीडीएफ में परिवर्तित करें। इस पीडीएफ को फिर एक स्थिर टेम्पलेट के आधार पर दूसरे पीडीएफ में मिला दिया जाता है। मुझे पता है कि मैं एक्सएमएल का परीक्षण कर सकता हूं और यह सुनिश्चित कर सकता हूं कि मान सही हैं, लेकिन कई संभावित बग और मुद्दे तैयार दस्तावेज के वास्तविक प्रदर्शन से संबंधित हैं - जैसे कि मिनुटिया जैसे कि लंबे टेक्स्ट स्ट्रिंग्स को कैसे लपेटा जाता है, जहां कुछ HTML क्षेत्र हैं दस्तावेज़ के संबंध में, आदि। क्या इन चीजों का परीक्षण करना भी संभव है (मुझे पता है कि ये संभवतः एकीकरण परीक्षण हैं या .. तीसरे प्रकार का परीक्षण जिसका नाम मैं भूल गया हूं [स्वीकार्यता परीक्षण नहीं, दूसरी तरह], और इकाई नहीं परीक्षण) जब से मैं अपने ज्ञान के लिए, एक पीडीएफ आसानी से इसे बनाने के लिए इसे वापस पढ़ने या एक HTML स्ट्रिंग (यानी परिवर्तित XML) बनाने और इसे हाथ से पार्स करने के लिए कुछ तालिका कोशिकाओं की उपस्थिति के लिए जाँच करने के लिए बाहर नकली अन्य तालिका कोशिकाओं के संबंध में।

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


6
"अनम्य बाहरी कारक" एक संकेत है कि आप पहले स्थान पर इकाई परीक्षण नहीं कर रहे हैं । इसका मतलब है कि एकीकरण परीक्षण। जो आप करना चाहते हैं? आपके कोड की इकाई परीक्षण या इस समग्र चीज़ का एकीकरण परीक्षण ? कृपया एक या दूसरे को चुनें, क्योंकि एक ही समय में दोनों के बारे में बात करना मुश्किल है।
S.Lott

2
मैं "अमोघ" नहीं खरीद रहा हूँ। मैं स्वीकार करूंगा कि "मैं नहीं जानता कि कैसे मजाक उड़ाया जाए", जिसका मतलब सिर्फ इतना है कि आपका असली सवाल यह है कि "मैं इसका मजाक कैसे उड़ाऊं?"।
रीन हेनरिच ने

संभवतः :) मैं इस्तेमाल किए गए एक्सएमएल का मजाक उड़ाने से परिचित हूं, लेकिन वास्तविक पीडीएफ या एचटीएमएल दस्तावेज़ का प्रारूप बनाने के तरीके से नहीं, जहां प्रारूपण मायने रखता है।
वेन मोलिना

1
मुझे लगता है कि आप का अर्थ है "कार्यात्मक" (आवेदन अंत से अंत तक) या "सिस्टम" (कई अनुप्रयोगों के अंत से अंत) परीक्षण
गैरी रोवे

@ गैरी - हाँ, कार्यात्मक शब्द था। मुझे उन्हें अब सीखने की लकीरें याद हैं: यूनिट टेस्ट मॉडल, फंक्शनल टेस्ट कंट्रोलर, इंटीग्रेशन टेस्ट सब कुछ।
वेन मोलिना

जवाबों:


13

इकाई नहीं सुविधा का परीक्षण करें

ज्ञात एक्सएमएल इनपुट का उपयोग करते हुए, एक पीडीएफ और मैन्युअल रूप से (और सावधानीपूर्वक) आउटपुट यह सत्यापित करें कि यह सही है। फिर इसे एक संदर्भ के रूप में सहेजें।

एक ही xml इनपुट का उपयोग करके भविष्य के परीक्षण संदर्भ के मुकाबले एक बाइनरी-फ़ाइल कर सकते हैं।

यदि एक फ़ाइल-स्तरीय तुलना असंतोषजनक है, तो परीक्षण के अंत में पीडीएफ प्रदर्शित करें और स्क्रीनशॉट लें, फिर संदर्भ स्क्रीनशॉट की तुलना में स्वचालित परीक्षण की तुलना करें।


+1 क्योंकि आप केवल इस स्तर पर अंतिम परिणाम में रुचि रखते हैं। यदि आप पीडीएफ को प्राप्त करने के तरीके को लागू करते हैं तो आपको अपना कार्यात्मक परीक्षण नहीं बदलना चाहिए।
गैरी रोवे

2
अच्छी सलाह के लिए +1, यह हम अपनी वर्तमान परियोजना में करते हैं। हमने पीडीएफ तुलना करने के लिए एक कस्टम टूलसेट बनाया, जो हमें टाइमस्टैम्प जैसे दस्तावेजों में बदलते भागों को छोड़ देने की अनुमति देता है। कैविएट: पीडीएफ रेंडरर के एक अलग (संस्करण के लिए) स्विच करने से लेआउट में सूक्ष्म परिवर्तन हो सकते हैं, जिससे गलत पॉज़िटिव्स के सिग्नल हीप्स की सीधी बाइनरी तुलना हो सकती है।
पेटर तोक

5

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

public class PdfBuilder : IPdfBuilder
{
  public byte[] BuildPdf(...)
  {
    // actual untestable code here
  }
}

public interface IPdfBuilder
{
  byte[] BuildPdf(...);
}

फिर आप जो भी चाहते हैं उसे करने के लिए अपने परीक्षणों में IPdfBuilder का मज़ाक उड़ा सकते हैं। इसका अक्सर अर्थ है कि आपको IoC कंटेनर ( /programming/871405/why-do-i-need-an-ioc-container-as-opposed-to-standardforward-di-code और यदि आप अभी उपयोग नहीं कर रहे हैं तो /programming/21288/which-net-dependency-injection-frameworks-are-worth-looking-into शुरू करें।

और परीक्षण जो इकाई परीक्षण नहीं होते हैं उन्हें अक्सर एकीकरण परीक्षण कहा जाता है। जटिल एकीकरण परीक्षण अक्सर पूरी तरह से इसके लायक नहीं होते हैं, इसलिए आप बस उस हिस्से को अमूर्त करते हैं और उस अमूर्त में व्यापार तर्क की मात्रा को कम करते हैं ताकि आप इसे एक इकाई परीक्षण में परख सकें।

मुझे बताएं कि क्या यह पूरी तरह से स्पष्ट नहीं है।


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

1

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

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


यह बहुत कसकर युग्मित है, लेकिन यह एक ऐसा क्षेत्र है जिसे मैं ठीक नहीं कर सकता, क्योंकि इसमें कोई खरीद-फरोख्त नहीं है, इसे शिथिल करने के लिए और कोई संसाधन रिफैक्टरिंग के लिए समर्पित नहीं हैं (लेकिन यह मुद्दों का एक पूरा सेट है)।
वेन मोलिना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.