unittest python中变量值的变化

2024-10-02 22:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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,但它应该是{},因为我在方法中更改了它?有什么解决办法吗?在


Tags: oftheselfisvaluedeferrorunittest
2条回答

尝试使用self.__class__.result = "ok"。在

它不起作用的原因是setUpClass()是一个class方法(因为@classmethod修饰符),所以self参数实际上是一个类。因此self.result = 'error'改变了class属性。在

您正在更改setUp方法中的类属性,并在tearDown中再次读取它,因为这两个都是类方法。然而,在您的测试中,您正在设置一个实例属性。在

你必须直接在类上设置它:

type(self).result = 'ok'

或者

^{pr2}$

后者将它绑定到当前测试类,第一个选项允许它在子类中工作。在

演示:

>>> 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):
...         type(self).result = 'ok'
...         print self.result
...
>>> unittest.main(exit=False)
setUpClass
ok
.The value of result is,  ok
it is working
The value of cls result is :  ok
TearDownClass

                                   
Ran 1 test in 0.000s

OK
<unittest.main.TestProgram object at 0x103945090>

但是,您通常希望避免在单个测试期间更改测试类状态。使用现有的test runner facilities来跟踪测试结果;全部

setUpClasstearDownClass方法可以应用于多个测试(取决于测试的运行方式),因此状态是共享的。在

相关问题 更多 >