जैसा कि मैं यूनिट परीक्षण में वास्तव में अनुभवी नहीं हूं, मैं कुछ नियमों को इकट्ठा करने की कोशिश कर रहा हूं जो मैं पहले सीखूंगा।
उन समस्याओं के लिए "नियम" सीखें, जिनका आपने कभी सामना नहीं किया है। यदि आप कुछ "नियम" या "सर्वोत्तम अभ्यास" पर आते हैं, तो मैं सुझाव दूंगा कि एक सरल खिलौना उदाहरण का उपयोग करें जहां यह नियम "माना जाता है" का उपयोग किया जाए, और उस समस्या को हल करने की कोशिश करते हुए , जो "नियम" कहता है, उसे अनदेखा करना।
इस मामले में, आप 2 या 3 सरल कक्षाओं और कुछ व्यवहारों के साथ आने का प्रयास कर सकते हैं, जिन्हें उन्हें लागू करना चाहिए। कक्षाओं को लागू करें जो कुछ भी स्वाभाविक लगता है और प्रत्येक व्यवहार के लिए एक इकाई परीक्षण लिखें। आपके द्वारा सामना की गई किसी भी समस्या की एक सूची बनाएं, जैसे कि यदि आपने एक तरह से काम करना शुरू कर दिया है, तो उसे वापस जाना होगा और बाद में इसे बदलना होगा; अगर आप इस बारे में भ्रमित हो गए कि चीजों को एक साथ कैसे फिट किया जाए; यदि आप बॉयलरप्लेट लिखने पर नाराज हो गए; आदि।
फिर "नियम" का पालन करके उसी समस्या को हल करने का प्रयास करें। फिर से, आपके सामने आने वाली समस्याओं की एक सूची बनाएं। सूचियों की तुलना करें, और सोचें कि नियम का पालन करते समय कौन सी स्थितियां बेहतर हो सकती हैं, और कौन सी नहीं।
आपके वास्तविक प्रश्न के रूप में, मैं एक बंदरगाहों और एडेप्टर दृष्टिकोण का पक्ष लेता हूं, जहां हम "कोर लॉजिक" और "सेवाओं" के बीच अंतर करते हैं (यह शुद्ध कार्यों और प्रभावी प्रक्रियाओं के बीच अंतर करने के समान है)।
मुख्य तर्क समस्या डोमेन के आधार पर "अंदर" चीजों की गणना करने के बारे में है। ऐसा लगता है कि कक्षाओं में शामिल हो सकता है User
, Document
, Order
, Invoice
, आदि यह ठीक कोर कक्षाएं फोन के लिए new
अन्य मुख्य वर्गों के लिए, के बाद से वे "आंतरिक" कार्यान्वयन विवरण। उदाहरण के लिए, एक निर्माण Order
भी एक बना सकता है Invoice
और एक Document
विवरण जो आदेश दिया गया था। परीक्षणों के दौरान इनका मजाक उड़ाने की कोई आवश्यकता नहीं है, क्योंकि ये वास्तविक चीजें हैं जिन्हें हम परीक्षण करना चाहते हैं!
पोर्ट और एडेप्टर हैं कि बाहरी दुनिया के साथ कोर लॉजिक कैसे बातचीत करते हैं। यह वह जगह है जहां चीजें चाहते Database
, ConfigFile
, EmailSender
, आदि रहते हैं। ये ऐसी चीजें हैं जो परीक्षण को कठिन बनाती हैं, इसलिए इन्हें मुख्य तर्क के बाहर बनाना आवश्यक है, और उन्हें आवश्यकतानुसार (या तो निर्भरता इंजेक्शन के साथ, या विधि तर्क आदि) पास करना चाहिए।
इस तरह, मुख्य तर्क (जो कि एप्लिकेशन-विशिष्ट भाग है, जहां महत्वपूर्ण व्यावसायिक तर्क रहता है, और सबसे मंथन के अधीन है) को डेटाबेस, फाइलों, ईमेल आदि की परवाह किए बिना, अपने आप पर परीक्षण किया जा सकता है। हम बस कुछ उदाहरण मानों में पास कर सकते हैं और जांच सकते हैं कि हमें सही आउटपुट मान मिले।
पोर्ट और एडेप्टर का अलग-अलग परीक्षण किया जा सकता है, डेटाबेस, फाइलसिस्टम इत्यादि के लिए मॉक का उपयोग करते हुए, बिना व्यापारिक तर्क की परवाह किए। हम बस कुछ उदाहरण मूल्यों में पास कर सकते हैं और सुनिश्चित कर सकते हैं कि उन्हें संग्रहीत / पढ़ा / भेजा / आदि किया जा रहा है। उचित रूप से।