2011-05-09 12 views
6

से एक स्थानीय विधि कॉल मेरे कोड:में सक्षम नहीं setUpClass

class TestSystemPromotion(unittest2.TestCase): 

    @classmethod 
    def setUpClass(self): 
    ... 
    self.setup_test_data() 
    .. 

    def test_something(self): 
    ... 

    def setup_test_data(self): 
    ... 

if __name__ == '__main__': 
    unittest2.main() 

त्रुटि जो मैं हो रही है:

TypeError: unbound method setup_test_data() must be called with TestSystemPromotion 
instance as first argument (got nothing instead) 

उत्तर

14

आप वर्ग तरीकों से उदाहरण तरीकों फोन नहीं कर सकते हैं। या तो setUp का उपयोग करने पर विचार करें, या setup_test_data क्लास विधि भी बनाएं। साथ ही, अगर आप भ्रम से बचने के लिए self के बजाय cls तर्क को बुलाते हैं तो बेहतर होता है - क्लास विधि का पहला तर्क कक्षा है, उदाहरण नहीं। उदाहरण (self) बिल्कुल मौजूद नहीं है जब setUpClass कहा जाता है।

class TestSystemPromotion(unittest2.TestCase): 

    @classmethod 
    def setUpClass(cls): 
    cls.setup_test_data() 


    @classmethod 
    def setup_test_data(cls): 
    ... 

    def test_something(self): 
    ... 

या:

class TestSystemPromotion(unittest2.TestCase): 

    def setUp(self): 
    self.setup_test_data() 

    def setup_test_data(self): 
    ... 

    def test_something(self): 
    ... 

बेहतर समझ के लिए, आप इसे इस तरह लगता है कि कर सकते हैं: cls == type(self)

+1

यह अभी भी अजगर 2.7+ में सच है? मैं 'सेटअप क्लास (स्वयं)' करने में सक्षम हूं और इसमें कुछ सुलभ 'self.var' चर परिभाषित करता हूं जिसमें मैं बाल कक्षाओं में' सुपर 'कर सकता हूं, और बच्चे उन्हें समझते हैं। – kiminoa

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