unittest属性在Python中是否可变?

时间:2012-10-16 18:37:18

标签: python unit-testing

假设我有这个集成测试

class TestClass(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.key = '123'

    def test_01_create_acc(self):
       user = create_account(...)
       self.key = user.key

    def test_02_check_account(self):
       user = check_account(..)
       self.assertEqual(self.key, user.key)

看起来属性self.key不可变。它与setUpClass中的旧值保持一致。但是setUpClass只调用一次?

帐户功能出于安全原因随机创建密钥,因此我不允许传入我的密钥。它返回密钥,因此我需要修改该属性。我可以吗?

看起来每个test_案例都是孤立的。

my_gloabl = None

def setUpClass(cls):
    cls.key = my_global

如果我在test1中更改my_global,则test2将获得None

1 个答案:

答案 0 :(得分:1)

该课程仅设置一次。但实际上每个测试方法都是从该测试的不同实例调用的。

您可以使用id函数演示这一点,该函数将为每个对象返回不同的数字:

import unittest

class TestClass(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print "setup"

    def test_01_create_acc(self):
        print id(self)

    def test_02_check_account(self):
        print id(self)

unittest.main()

在我的电脑上,打印出来:

setup
4300479824
.4300479888

注意setup方法只被调用一次,但是 test1和test2的实例的id是不同的。