Python Unittest在运行时发现



我正在尝试通过单独的测试脚本运行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.pytest_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''因为您可能希望将来重命名。

相关内容

最新更新