2013-01-11 9 views
7

निम्नलिखित बाहरनाक परीक्षण कक्षा के लिए सेटअप (स्वयं) के बजाय __init __ (स्वयं) का उपयोग करने के लिए कोई नकारात्मक पक्ष है?

class TestTemp(): 

    def __init__(self): 
     print '__init__' 
     self.even = 0 

    def setup(self): 
     print '__setup__' 
     self.odd = 1 

    def test_even(self): 
     print 'test_even' 
     even_number = 10 
     assert even_number % 2 == self.even 

    def test_odd(self): 
     print 'test_odd' 
     odd_number = 11 
     assert odd_number % 2 == self.odd 

प्रिंट के लिए चल रहा है nosetests -s

__init__ 
__init__ 
__setup__ 
test_even 
.__setup__ 
test_odd 
. 

परीक्षण उदाहरणों जबकि सेटअप सही परीक्षण से पहले चलाता है से पहले परीक्षण चलाए जा रहे हैं बनाई गई हैं,।

सामान्य मामले के लिए, __init__() और सेटअप() एक ही चीज़ को पूरा करते हैं, लेकिन सेटअप() के बजाय __init__() का उपयोग करने के लिए नकारात्मक है? या दोनों का उपयोग कर रहे हैं?

उत्तर

2

जबकि __init__setUp के लिए एक स्थानापन्न के रूप में काम कर सकते हैं, तो आप setUp से चिपके चाहिए क्योंकि यह परीक्षण लिखने के लिए शैली प्रोटोकॉल का हिस्सा है। इसमें समकक्ष, tearDown भी है, जो __init__ नहीं है, साथ ही कक्षा- और मॉड्यूल-स्तर समकक्ष जो __init__ नहीं है।

लेखन कक्षाएं सामान्य कक्षाएं लिखने से अलग हैं, इसलिए आपको परीक्षा कक्षाओं को लिखने के लिए उपयोग की जाने वाली शैली से चिपकना चाहिए।

+0

मैं मानता हूं कि यदि स्टाइलिज्ड प्रोटोकॉल का उपयोग करते हुए टेस्ट क्लास '__init__' के लिए कोई उपयोग केस नहीं है, तो 'सेटअप', स्थिरता के लिए बेहतर विकल्प है। –

2

हां, आपको परीक्षणों के लिए एक साफ स्लेट बनाना है, और अपने व्यक्तिगत परीक्षण अलग रखना है।

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

+2

यह सच नहीं है: प्रत्येक परीक्षण के लिए एक नया परीक्षण केस उदाहरण बनाया गया है, इसलिए '__init__' को 'सेटअप' के रूप में अक्सर कहा जाता है। –

+0

@NedBatchelder: तो यह है; वही आधार अभी भी बाहरी राज्य के लिए लागू होता है .. हेड-अप के लिए धन्यवाद! –

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