【发布时间】:2015-06-19 15:53:47
【问题描述】:
我有一个包含测试模块的包,并且在 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 变量,并且仍然可以从包中的其他模块访问它?
【问题讨论】:
-
“这些操作在包的模块中的任何单元测试运行之前正确执行。” - 你确定,因为它们似乎没有运行。
-
@jonrsharpe 我很确定,我可以在包的 setUp 方法中打印内容以确保它按预期运行。
-
__init__.setUp是否应该在导入TestPackage时运行?我无法复制这种行为。 -
@chepner 我用鼻子运行测试,它允许包级别的 setUp 和 tearDown 方法。毫无疑问,setUp 方法正在运行,在包中的任何其他测试用例之前,我可以轻松确认。
标签: python scope global-variables python-unittest