Python单元测试在运行时发现

时间:2019-05-22 15:30:28

标签: python python-3.x unit-testing python-import

我正在尝试从单独的测试脚本运行针对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的新手,对如何解决此问题一无所知。 SO的其他问题/答案也没有帮助。那我该如何工作呢?

1 个答案:

答案 0 :(得分:0)

有几种方法可以运行测试。现在它们是导入包,请尝试

python -m unittest -v的相对导入路径中删除两个点后,在根软件包文件夹中

test/test_a_module.py。也将与同一文件夹中的python main.py一起使用。如果您在python -m unittest -v之外发出root,并且在相对路径前面加上root,它也会起作用。可能还有其他方法。

请注意,测试文件中的相对导入路径会受到运行测试脚本的文件夹的影响。

要保持连贯性,请始终从同一位置运行测试,并将所有测试放入test/中,您可以在其中通过相对路径引用所有root子软件包,而无需提及`root *软件包名称,这很好,因为您将来可能要重命名。