我正在尝试通过单独的测试脚本运行Python模块的单元测试。这是我的文件结构
- root
|- modules
|- a_module.py
|- test
|- test_a_module.py
|- main.py
main.py
看起来像这样:
import unittest
loader = unittest.TestLoader()
suite = loader.discover(start_dir='./test', pattern='test_*.py')
runner = unittest.TextTestRunner()
runner.run(suite)
这里是a_module.py
和test_a_module.py
:
# a_module.py
def something():
return True
# test_a_module.py
import unittest
from ..modules.a_module import something
class TestSomething(unittest.TestCase):
def test_something(self):
self.assertTrue(something)
运行python3 main.py
时,我会收到以下错误。
======================================================================
ERROR: test_a_module (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: test_a_module
Traceback (most recent call last):
File "/usr/lib/python3.7/unittest/loader.py", line 436, in _find_test_path
module = self._get_module_from_name(name)
File "/usr/lib/python3.7/unittest/loader.py", line 377, in _get_module_from_name
__import__(name)
File "/home/schu_max/root/test/test_a_module.py", line 3, in <module>
from ..modules.a_module import something
ImportError: attempted relative import with no known parent package
----------------------------------------------------------------------
我对Python的新手相对较新,并且对如何解决此问题一无所知。以及其他问题/答案,因此也不有用。那么我该如何工作?
有几种方法可以进行测试。现在它们是导入软件包尝试
python -m unittest -v
在root软件包文件夹中,从 test/test_a_module.py
中的相对导入路径中删除了两个点后。也将与同一文件夹中的python main.py
一起使用。如果您在root
之外发出python -m unittest -v
,并且将相对路径带有root
的前缀也将起作用。可能还有其他方法。
只是beawware,即测试文件中的相对导入路径受您运行测试脚本的文件夹的影响。
保持连贯性,始终从同一位置运行测试,然后将所有测试放入test/
中,您可以通过相对路径引用所有root子包,而无需提及`root* package name''因为您可能希望将来重命名。