Skip to main content
 首页 » 编程设计

python之unittest 的 setUpClass 类方法能否返回一个值以在其他测试中使用

2025年05月04日22itcoder

我正在尝试为依赖于模块级数据(JSON 文件)的程序编写单元测试。
所以,我想我会使用 setUpClass 类方法设置一个测试 JSON 文件,然后在测试运行后将其删除。
我遇到的问题是,模块级 JSON 的设置返回了一个值,该值是我也打算测试的程序的其他功能所需要的。
这是我的意思的一个例子:

import unittest 
import myProg   
 
class TestProg(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
        # initialize() creates the JSON file 
        myProg.initialize() 
        f = myProg.initialize_storage() 
        return f 
 
    def test_prog_func(self): 
        myProg.prog_func("test_key", "test_value", f) 

f 是我其余功能所需的项目。 此代码无效。我正在寻找一种方法,使我能够从 setUpClass 中“return f”,以便在整个测试过程中使用。

请您参考如下方法:

你不能返回任何东西,不,返回值被忽略。您可以设置类属性,这些属性可用于所有测试:

class TestProg(unittest.TestCase): 
    @classmethod 
    def setUpClass(cls): 
        # initialize() creates the JSON file 
        myProg.initialize() 
        cls.f = myProg.initialize_storage()  # set a class attribute 
 
    def test_prog_func(self): 
        # self.f here will find the class attribute 
        myProg.prog_func("test_key", "test_value", self.f) 

那是因为对实例的属性查找也会找到类属性(毕竟这就是找到方法的方式)。

请注意,测试运行器将为每个正在运行的测试创建一个类的新实例;确保实例状态是干净的。类状态未清除,因此如果您更改测试中的类属性,您将不再具有适当的测试隔离。