Skip to main content
 首页 » 编程设计

python之unittest 属性在 Python 中是否可变

2025年05月04日7飞鱼

假设我有这个集成测试

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 不是只调用了一次吗?

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

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

my_gloabl = None 
 
def setUpClass(cls): 
    cls.key = my_global 

如果我在 test1 中更改 my_global,test2 将得到 None。

请您参考如下方法:

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

您可以使用 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 是不同的。