Python:无法从init文件导入setUp方法中初始化的全局变量

时间:2015-06-19 15:53:47

标签: python scope global-variables python-unittest

我有一个带有测试模块的软件包,在init文件中我有一个带有一些操作的setUp方法。在程序包模块中的任何单元测试运行之前,这些操作都会正确执行。在setUp方法中,我想初始化一个全局变量,然后从包的其他模块访问它。但这不起作用。

# TestPackage/__init__.py
def setUp():
    global spec_project
    core_manager = get_core_manager()
    spec_project = core_manager.get_spec()

#TestPackage/test_module.py
from TestPackage import spec_project
import unittest

class TestRules(unittest.TestCase):
    def setUp(self):
        spec_project.get_new_device()

像这样我得到了

  

ImportError:无法导入名称spec_project

如果我在init文件中的setUp方法之外初始化spec_project变量,我可以访问它,但是在setUp方法中的操作之后它的内容不会改变。

# TestPackage/__init__.py
spec_project = None
def setUp():
    global spec_project
    core_manager = get_core_manager()
    spec_project = core_manager.get_spec()

#TestPackage/test_module.py
from TestPackage import spec_project
import unittest

class TestRules(unittest.TestCase):
    def setUp(self):
        spec_project.get_new_device()

像这样我得到了

  

AttributeError:'NoneType'对象没有属性'get_new_device'

如何初始化init文件的setUp方法中的spec_project变量,并且仍然可以从包中的其他模块访问它?

1 个答案:

答案 0 :(得分:1)

看起来setUp()没有被调用,但是如果你确定它是,那么它可能就是你导入TestPackage的方式。尝试像这样导入:

#TestPackage/test_module.py
import TestPackage
import unittest

class TestRules(unittest.TestCase):
    def setUp(self):
        TestPackage.spec_project.get_new_device()

在使用global之前必须调用setUp()方法。同样的事情应该适用于你尝试的第二种方式。但同样,这是假设setUp运行。如果认为有必要,可以为TestPackage设置别名,或者如果在方法之外定义了它,则应该能够导入它。

由于您是明确地导入它,因此可能会尝试复制它,这是不可能的,因为它位于setUp()体内。