2013-08-05 7 views
9

क्या इन दो तरीकों के बीच कोई रनटाइम-तर्क अंतर है? या कोई व्यवहार मतभेद?
यदि नहीं, तो मुझे __init__ को भूलना चाहिए और केवल setUpClass भाषा भाषा ओओपी प्रतिमान के बजाय नामस्थानों जैसे unittests कक्षाओं के बारे में सोचने का उपयोग करना चाहिए?मुझे setUpClass का उपयोग कब करना चाहिए और जब __init__?

उत्तर

11

दोनों काफी अलग हैं।

setUpClass एक वर्ग विधि, एक के लिए है, ताकि वे केवल आपके वर्ग स्थापित गुण दूँगा।

उन्हें अलग-अलग समय पर भी बुलाया जाता है। परीक्षण धावक प्रत्येक परीक्षण के लिए एक नया उदाहरण बनाता है। यदि आप कक्षा में 5 परीक्षण विधियों को शामिल करते हैं, तो 5 उदाहरण बनाए जाते हैं और __init__ को 5 बार कहा जाता है।

setUpClass सामान्यतः केवल को कहा जाता है। (यदि आप अलग-अलग वर्गों से टेस्ट ऑर्डरिंग और परीक्षण विधियों को घुमाते हैं तो setUpClass को कई बार कहा जा सकता है, tearDownClass का उपयोग ठीक से साफ करने के लिए करें और यह कोई समस्या नहीं होगी)।

इसके अलावा, एक परीक्षण धावक आमतौर पर परीक्षण चलाने की शुरुआत में सभी परीक्षण उदाहरण बनाता है; यह आमतौर पर सस्ता है, क्योंकि टेस्ट इंस्टेंस (ज्यादा) स्थिति नहीं रखते हैं इसलिए बहुत मेमोरी नहीं लेती है।

अंगूठे के नियम के रूप में, आपको __init__ का उपयोग करना चाहिए। सभी परीक्षणों के बीच साझा राज्य बनाने के लिए setUpClass का उपयोग करें, और प्रति-परीक्षण स्थिति बनाने के लिए setUp का उपयोग करें। setUp को एक परीक्षण चलाने से ठीक पहले बुलाया जाता है, इसलिए आप परीक्षण के लिए आवश्यक होने तक बहुत मेमोरी-गहन स्थिति बनाने से बच सकते हैं, और पहले नहीं।

संबंधित मुद्दे