Python: 无法从 init 文件导入在 setUp 方法中初始化的全局变量
Python: Unable to import global variable initialized in setUp method from init file
我有一个包含测试模块的包,在 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: cannot import name 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' object has no attribute 'get_new_device'
如何在 init 文件的 setUp 方法中初始化 spec_project 变量并且仍然可以从包中的其他模块访问它?
看起来好像没有调用 setUp(),但如果您确定它被调用了,那么它可能是您导入 TestPackage 的方式。尝试像这样导入:
#TestPackage/test_module.py
import TestPackage
import unittest
class TestRules(unittest.TestCase):
def setUp(self):
TestPackage.spec_project.get_new_device()
在使用全局变量之前必须调用 setUp() 方法。同样的事情应该适用于您尝试的第二种方式。但同样,这是假设 setUp 是 运行。如果你觉得有必要,你可以给TestPackage取别名,或者如果它定义在方法之外,你应该可以导入它。
由于您明确导入它,它可能会尝试复制它,这是不可能的,因为它在 setUp() 主体内。
我有一个包含测试模块的包,在 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: cannot import name 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' object has no attribute 'get_new_device'
如何在 init 文件的 setUp 方法中初始化 spec_project 变量并且仍然可以从包中的其他模块访问它?
看起来好像没有调用 setUp(),但如果您确定它被调用了,那么它可能是您导入 TestPackage 的方式。尝试像这样导入:
#TestPackage/test_module.py
import TestPackage
import unittest
class TestRules(unittest.TestCase):
def setUp(self):
TestPackage.spec_project.get_new_device()
在使用全局变量之前必须调用 setUp() 方法。同样的事情应该适用于您尝试的第二种方式。但同样,这是假设 setUp 是 运行。如果你觉得有必要,你可以给TestPackage取别名,或者如果它定义在方法之外,你应该可以导入它。
由于您明确导入它,它可能会尝试复制它,这是不可能的,因为它在 setUp() 主体内。