2011-05-09 19 views
6

yerel bir yöntemi çağırmak Kodum: ben alıyorummümkün değil 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() 

Hata geçerli:

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

cevap

14

Sen sınıf yöntemlerinden örnek yöntemleri diyemezsin. Bunun yerine setUp kullanmayı veya setup_test_data bir sınıf yöntemini kullanmayı düşünün. Ayrıca, karışıklıktan kaçınmak içinargümanı yerine cls argümanını çağırırsanız daha iyi olur - sınıf metoduna ilk argüman örnek değil, sınıftır. setUpClass çağrıldığında, örnek (self) yok.

class TestSystemPromotion(unittest2.TestCase): 

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


    @classmethod 
    def setup_test_data(cls): 
    ... 

    def test_something(self): 
    ... 

Veya:

daha iyi anlama için
class TestSystemPromotion(unittest2.TestCase): 

    def setUp(self): 
    self.setup_test_data() 

    def setup_test_data(self): 
    ... 

    def test_something(self): 
    ... 

, bunu bu şekilde düşünebilirsiniz: cls == type(self)

+1

bu Python 2.7+ hala doğru mu? 'SetUpClass (self)' yapabildim ve bazı erişilebilir 'self.var' değişkenlerini tanımladım, sonra çocuk sınıflarında 'süper' olabilir ve çocuklar onları anlar. – kiminoa

İlgili konular