import unittest
class TestTemplate(unittest.TestCase):
@classmethod
def setUpClass(self):
self.result = 'error'
print "setUpClass"
@classmethod
def tearDownClass(self):
print "The value of result is, ",self.result
if self.result == 'ok':
print "it is working"
print "The value of cls result is : ", self.result
print "TearDownClass"
class MyTest(TestTemplate):
def test_method_one(self):
self.result = 'ok'
print self.result
if __name__ == '__main__':
unittest.main()
在tearDownClass
中自我结果是error
,但它应该是{
尝试使用
self.__class__.result = "ok"
。在它不起作用的原因是
setUpClass()
是一个class方法(因为@classmethod
修饰符),所以self
参数实际上是一个类。因此self.result = 'error'
改变了class属性。在您正在更改
setUp
方法中的类属性,并在tearDown
中再次读取它,因为这两个都是类方法。然而,在您的测试中,您正在设置一个实例属性。在你必须直接在类上设置它:
或者
^{pr2}$后者将它绑定到当前测试类,第一个选项允许它在子类中工作。在
演示:
但是,您通常希望避免在单个测试期间更改测试类状态。使用现有的test runner facilities来跟踪测试结果;全部
setUpClass
和tearDownClass
方法可以应用于多个测试(取决于测试的运行方式),因此状态是共享的。在相关问题 更多 >
编程相关推荐