परीक्षण मामलों में प्रयुक्त "सेटअप" और "टियरडाउन" पायथन विधियों की व्याख्या करें


93

क्या कोई भी टेस्ट केस लिखते समय पायथन setUpऔर tearDownविधियों के उपयोग की व्याख्या कर सकता है setUp, टेस्ट पद्धति को कॉल करने से तुरंत पहले tearDownबुलाया जाता है और इसे कॉल किए जाने के तुरंत बाद कहा जाता है?

जवाबों:


85

सामान्य तौर पर आप सभी पूर्वापेक्षाओं को सेटअप में जोड़ते हैं और सभी क्लीन-अप चरणों को आंसू बहाते हैं।

आप यहां उदाहरणों के साथ अधिक पढ़ सकते हैं ।

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

उदाहरण के लिए, आपके पास एक ऐसा परीक्षण है जिसके लिए वस्तुओं की मौजूदगी या निश्चित अवस्था की आवश्यकता होती है - इसलिए आप इन कार्यों को सेटअप में डालते हैं (ऑब्जेक्ट इंस्टेंस बना रहे हैं, db को इनिशियलाइज़ कर रहे हैं, नियम तैयार कर रहे हैं)।

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

तो विचार यह है कि परीक्षण में केवल ऐसी क्रियाएं शामिल होनी चाहिए जो परिणाम प्राप्त करने के लिए परीक्षण ऑब्जेक्ट पर की जाए, जबकि सेटअप और टियरडाउन आपके परीक्षण कोड को साफ और लचीला छोड़ने में आपकी सहायता करने के तरीके हैं।

आप परीक्षणों के एक समूह के लिए एक सेटअप और टियरडाउन बना सकते हैं और उन्हें मूल श्रेणी में परिभाषित कर सकते हैं - इसलिए आपके लिए इस तरह के परीक्षणों का समर्थन करना और सामान्य तैयारी और क्लीन अप को अपडेट करना आसान होगा।

यदि आप एक आसान उदाहरण की तलाश में हैं तो कृपया उदाहरण के साथ निम्नलिखित लिंक का उपयोग करें


53

आप परीक्षण सूट में सभी परीक्षणों के लिए कोड कॉमन टू फैक्टर आउट का उपयोग कर सकते हैं।

यदि आपके परीक्षणों में बहुत बार दोहराया गया कोड है, तो आप इस कोड को सेटअप / टियरडाउन में ले जाकर उन्हें छोटा बना सकते हैं।

आप परीक्षण डेटा बनाने के लिए इसका उपयोग कर सकते हैं (उदाहरण के लिए नकली / नकली सेट करना), या नकली के साथ कार्यों को रोकना।

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

उदाहरण के लिए:

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())

16
+1 क्योंकि कोड की 9 पंक्तियाँ मुझे 100% टटोलने की ज़रूरत हैं। सुरुचिपूर्ण, संक्षिप्त उदाहरण। सच कहूं तो उन 9 पंक्तियों को ही मैंने सवाल के अलावा पेज पर पढ़ा था, जो मेरा सवाल भी था। क्या आपने कोड नमूने से पहले अंग्रेजी में कुछ कहा था? इसकी जरूरत नहीं थी! कोड ने कहा कि यह सब! धन्यवाद मैट।
नाथन सी। ट्राईसच

2
मुझे यह स्पष्ट नहीं है कि "परीक्षण को छोड़ दें यदि कुछ ठीक से सेट नहीं किया गया है" तो यहां प्रदर्शन किया जा रहा है। या कि बस एक तरफ था?
user5359531

6

मान लीजिए आपके पास 10 परीक्षणों वाला एक सूट है। परीक्षणों में से 8 समान सेटअप / फाड़ कोड साझा करते हैं। अन्य 2 नहीं।

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


1
कभी-कभी परीक्षणों को दूसरे टेस्टकेस में स्थानांतरित करना अवांछित होता है। टैज़ मामले में आप सेटअप / फाड़ कोड के साथ एक डेकोरेटर लिख सकते हैं और केवल वांछित परीक्षण कार्यों को सजा सकते हैं।
मथिज्स

2
यह प्रश्न का उत्तर नहीं है।
gent
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.