这是一个经常以不同形式被问到的问题,通常得到的回答是“哈哈,你做得不对”。我很确定这是因为人们(包括我)都在尝试使用一个常识场景作为实现,而解决方案并不明显(如果你以前没有这样做过)。
会接受一个“让苍蝇飞出瓶子”的回答。
给定的
project/
__init__.py
/code
__init__.py
sut.py
/tests
__init__.py
test_sut.pytests_sut.py开始的位置:
import code.sut在根目录中运行nosetests会导致:
ImportError: No module named code.sut走过的道路:
a)使用
from ..code import sutb)将项目的根添加到PYTHONPATH
c)使用
sys.path.append要添加..每个测试模块开始处的导入之前的路径。
d)只需记住做一个
setup.py 在运行测试之前,在项目上将模块安装到站点包中。
因此,要求测试位于测试包根目录下,这些测试可以访问项目。以上每一项对我来说都不是“自然”的,都被证明是有问题的,或者看起来像是太难的工作!
在java中,这是可行的,但基本上是借助于构建工具/ IDE将所有类放在类路径中。也许问题是我期待的是Python的“魔力”?在Flask webframework测试中指出,选项d)似乎是首选的。
在任何情况下,下面推荐一个首选解决方案的声明将消除我自己的“不自然”的感觉。
发布于 2012-05-18 12:46:57
我也遇到了同样的问题,并在相关问题中找到了一个适合我的answer。
只需删除项目根目录中的__init__.py即可。
https://stackoverflow.com/questions/6670275
复制相似问题