我有一个目前看起来像这样的项目:
src/
proc.py
adapter.py
etc.
test/
core/test_proc.py
adapters/test_adapter.py
我想在test /下运行所有测试,其中大部分从src导入一些模块。为此,我已将src /添加到我的PYTHONPATH中,但是使用'python3 -m unittest discover -s test /'给出一个无法导入名称'Proc'(来自proc.py),尽管'python3 -m unittest discover -s test / core /'工作正常
这是我应该做的事情(如果是这样,出了什么问题)或是否有更好/更明智的方式来组织我的源和测试,以便我可以轻松地在顶层运行我的所有测试,他们他们自己可以从src /?
导入答案 0 :(得分:0)
您需要将 init .py文件添加到目录/子目录。
project/
src/
proc.py
adapter.py
__init__.py
test/
core/
test_proc.py
__init__.py
adapters/
test_adapter.py
__init__.py
然后你可以从project /
发现测试答案 1 :(得分:0)
您应该使用relative imports。为此,您应该将项目封装到一个目录中,如下所示:
src/
__init__.py
app/
__init__.py
proc.py
adapter.py
etc.
test/
__init__.py
core/
__init__.py
test_proc.py
adapters/
__init__.py
test_adapter.py
然后,在test_proc.py
内,您可以使用from ...app.proc import something
答案 2 :(得分:0)
到目前为止,“ unittest discover”无法递归扫描测试类。在Python 3.4中添加了补丁issue17457,此补丁已部分修复了该问题,因此当您将命名空间包显式指定为发现目标时,发现才起作用。即当您跑步时 “ python3 -m unittest发现-s测试/核心”
但是它不会递归到namespace_pkg内的任何命名空间包中。所以当你跑步 'python3 -m unittest discover -s test /'并未在cwd中的所有名称空间包(主要是文件夹)下出现。
一些PR正在进行中(例如:issue35617),以便对发现路径下的所有目录进行递归扫描,但尚未发布
所以基本上,到目前为止,如果需要使用一个命令运行所有测试,则必须将所有测试放在一个文件夹中。