जवाबों:
जब आप अपनी कक्षा में एक से अधिक परीक्षण विधि रखते हैं तो यह अंतर स्वयं प्रकट होता है। setUpClass
और tearDownClass
पूरी कक्षा के लिए एक बार चलाए जाते हैं; setUp
और tearDown
प्रत्येक परीक्षण विधि से पहले और बाद में चलाए जाते हैं।
उदाहरण के लिए:
class Example(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass")
def setUp(self):
print("setUp")
def test1(self):
print("test1")
def test2(self):
print("test2")
def tearDown(self):
print("tearDown")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
जब आप यह परीक्षण चलाते हैं, तो यह प्रिंट करता है:
setUpClass
setUp
test1
tearDown
.setUp
test2
tearDown
.tearDownClass
(डॉट्स ( .
) कर रहे हैं unittest
के डिफ़ॉल्ट उत्पादन जब एक परीक्षण गुजरता है।) है कि ध्यान से देखें setUp
और tearDown
पहले और बाद में दिखाई देते हैं test1
और test2
, जबकि setUpClass
और tearDownClass
केवल एक बार दिखाई देते हैं, शुरुआत और पूरे परीक्षण मामले के अंत में।
unittest
जब तक कि यह tearDown
घटना के बिना पूरा नहीं हो जाता है , तब तक एक परीक्षण पर विचार नहीं करता है ।
setUp
और tearDown
प्रत्येक हर के लिए एक बार चलाए जा रहे हैं test
(इस उदाहरण में कुल में तो दो बार) विधि लेकिन setUpClass
और tearDownClass
बस हर एक बार चलाए जा रहे हैं।
setUp()
और अंतर क्या है ?setUpClass()
unittest
मुख्य अंतर (जैसा कि बेंजामिन हॉजसन द्वारा जवाब में कहा गया है) यह setUpClass
केवल एक बार कहा जाता है और सभी परीक्षणों से पहले होता है, जबकि setUp
प्रत्येक और प्रत्येक परीक्षण से तुरंत पहले कहा जाता है। (एनबी: यही बात अन्य एक्सयूनाइट टेस्ट फ्रेमवर्क में समकक्ष विधियों पर लागू होती है, न कि केवल पायथन के लिए unittest
)।
से unittest
प्रलेखन :
setUpClass()
एक वर्ग विधि जिसे व्यक्तिगत वर्ग में परीक्षण से पहले बुलाया जाता है, चलाया जाता है। setUpClass को केवल तर्क के रूप में कक्षा के साथ बुलाया जाता है और उसे एक वर्गमाथ () के रूप में सजाया जाना चाहिए:
@classmethod
def setUpClass(cls):
...
तथा:
setUp()
पद्धति परीक्षण स्थिरता तैयार करने के लिए कहती है। परीक्षण विधि को कॉल करने से तुरंत पहले इसे कहा जाता है; एसेरियनएयर या स्किपटेस्ट के अलावा, इस पद्धति द्वारा उठाए गए किसी भी अपवाद को एक परीक्षण विफलता के बजाय एक त्रुटि माना जाएगा। डिफ़ॉल्ट कार्यान्वयन से कुछ भी नहीं होता है।
प्रश्न के इस भाग का उत्तर अभी तक नहीं दिया गया है। गियरन द्वारा जवाब के जवाब में मेरी टिप्पणी के अनुसार, setUp
विधि का तात्पर्य उस स्थिरता के तत्वों से है जो सभी परीक्षणों के लिए आम हैं (प्रत्येक परीक्षण में उस कोड की नकल करने से बचने के लिए)। मुझे लगता है कि यह दोहराव को हटाने के रूप में अक्सर उपयोगी होता है (आमतौर पर) पठनीयता में सुधार होता है और रखरखाव के बोझ को कम करता है।
setUpClass
विधि महंगा तत्वों के लिए है यदि आपको केवल इस तरह के एक डेटाबेस कनेक्शन आदि खोलने, फाइल सिस्टम पर एक अस्थायी फ़ाइल खोलने, परीक्षण के लिए एक साझा लाइब्रेरी लोड हो रहा है, ऐसी बातें करने से पहले प्रत्येक परीक्षा को धीमा के रूप में, एक बार ऐसा करने के लिए होता है कि परीक्षण सूट बहुत अधिक है, इसलिए हम इसे सभी परीक्षणों से पहले एक बार करते हैं। यह परीक्षणों की स्वतंत्रता में थोड़ी गिरावट है लेकिन कुछ स्थितियों में एक आवश्यक अनुकूलन है। यकीनन, किसी को यूनिट परीक्षणों में ऐसी चीजें नहीं करनी चाहिए क्योंकि आमतौर पर डेटाबेस / फाइलसिस्टम / लाइब्रेरी / जो भी वास्तविक चीज का उपयोग किए बिना मॉक करना संभव है। जैसे, मुझे लगता है कि setUpClass
शायद ही कभी जरूरत है। हालांकि, उपरोक्त उदाहरणों (या समान) का परीक्षण करते समय यह उपयोगी है।