这是一个经常以不同形式被问到的问题,并且经常得到“大声笑你做得不好”的回答。很确定这是因为人们(包括我)正在尝试将其用作实现的常识场景,并且解决方案并不明显(如果您以前没有这样做过)。
会接受“让飞出瓶子”的答案。
给定
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.py
tests_sut.py 开始的地方:
import code.sut
在根目录中运行鼻子测试会导致:
ImportError: No module named code.sut
走过的大道:
a)做一个亲戚使用
from ..code import sut
b) 将项目的根目录添加到 PYTHONPATH
c) 使用
sys.path.append
在每个测试模块开始处的导入之前添加 .. 路径。
d) 只记得做一个
setup.py
在项目上将模块安装到站点包中,然后再运行测试。
所以要求是让测试位于可以访问项目的测试包根目录下。以上每一项对我来说都不“自然”,被证明是有问题的,或者看起来太辛苦了!
在 java 中这是可行的,但基本上是通过您的构建工具/IDE 将您的所有类放在类路径上。也许问题是我期待 Python 的“魔法”?在 Flask 网络框架测试中已经注意到,选项 d) 似乎是首选。
无论如何,以下推荐首选解决方案的陈述将消除我自己的“不自然”感觉。