जवाबों:
जब आप अपनी कक्षा में एक से अधिक परीक्षण विधि रखते हैं तो यह अंतर स्वयं प्रकट होता है। 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शायद ही कभी जरूरत है। हालांकि, उपरोक्त उदाहरणों (या समान) का परीक्षण करते समय यह उपयोगी है।