2011-05-09 55 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类方法。此外,如果您调用参数cls而不是self以避免混淆,则更好 - 类方法的第一个参数是类,而不是实例。当setUpClass被调用时,实例(self)根本不存在。

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

在Python 2.7+这仍然是真的吗?我已经能够执行'setUpClass(s​​elf)'并在其中定义一些可访问的'self.var'变量,然后我可以在子类中“超级”,并且孩子们理解它们。 – kiminoa 2015-03-16 20:12:00