我想对可以导入的模块进行测试,但是将它们保存在src
文件夹之外,同时与应用程序模块共享命名空间(类似{{ 1}})甚至可能吗?我是不是太复杂了?
目录结构:
my-module.test.unit
setup.py
root/
src/
my-module/
test/
end-to-end/
unit/
helper.py
test_foo.py
setup.py
我认为可能的选择:
更改setup.py:
setup(
# ...
'packages'=['my-module'],
'package_dir'={'': 'src'}
# ...
)
setup(
# ...
'packages'=['my-module', 'my-module.test.unit'],
'package_dir'={
'my-module': 'src', # doesn't work in editable mode
'my-module.test.unit': 'test/unit'
}
# ...
)
文件夹基本原理是我在与测试相同的文件夹中有一些辅助模块(例如test
),并且使用绝对导入(例如test/unit/helper.py
)导入它们。这个设置没有什么不妥,因为它有效,但假设一个新的内置模块可能会影响我的任何一个因为它们优先。我相信相对进口更好,因为没有留下任何解释空间(from helper import Helper
)。 AFAIK,如果我的测试本身是一个包,我可以使用相对导入(例如explicit is better than implicit
)来使用这些模块。
最后,它更多地是一个良好的实践和正确性问题,而不是一个真正的问题,因为from .helper import Helper
也适用;)
参考文献: