我有一个带有测试模块的软件包,在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变量,并且仍然可以从包中的其他模块访问它?
答案 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()体内。