unittest的setUpClass classmethod可以返回一个值,以便在其他测试中使用吗?

时间:2017-10-18 07:50:12

标签: python python-3.x unit-testing class

我试图为依赖于模块级数据(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是我的其余功能所需的项目。 此代码不起作用。我正在寻找一种方法让我能够{" return f"从整个测试中使用的setUpClass。

1 个答案:

答案 0 :(得分:4)

您无法返回任何内容,不会忽略返回值。您可以设置类属性,它们可用于所有测试:

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)

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

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