2017-10-18 53 views
0

我正在尝试为依赖模块级数据(JSON文件)的程序编写单元测试。
所以,我想我会使用setUpClass classmethod设置一个测试JSON文件,然后在测试运行后撕下它。
我遇到的问题是模块级别JSON的设置返回了一个值,这是我还打算测试的程序的其他函数所需的值。
这里是我的意思的例子:单元测试的setUpClass classmethod可以返回一个值,以便在其他测试中使用吗?

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”。

+2

setUpClass方法的第一个参数'cls'是类变量。保存在里面。 'cls.f = f' –

回答

3

你不能返回任何东西,不,返回值被忽略。您可以设置类属性,这是提供给所有的测试:

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) 

这是因为在实例属性查找也会找到类属性(这方法是如何发现的,毕竟)。

请注意,测试运行器将为每个正在运行的测试创建一个新的类实例;确保实例状态干净。类的状态不会被清除,所以如果你的类属性在测试中不再适当的测试隔离,那么如果你改变了

相关问题