最佳答案
我有一个项目目录结构如下(我认为这是相当标准的) :
my_project
setup.py
mypkg
__init__.py
foo.py
tests
functional
test_f1.py
unit
test_u1.py
我使用 py.test 作为我的测试框架,我希望能够在 my_project
目录中运行 py.test tests
来运行我的测试。这确实有效,直到我尝试在测试中使用(例如) import mypkg
导入我的应用程序代码。此时,我得到错误“ No module name mypkg”。在进行一些调查之后,发现 py.test
使用 sys.path
中的测试文件目录运行测试,但是使用 没有运行 py.test
。
为了解决这个问题,我在 tests
目录中添加了一个 conftest.py
文件,其中包含以下代码:
import sys, os
# Make sure that the application source directory (this directory's parent) is
# on sys.path.
here = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, here)
这看起来是可行的,但是这是确保测试可以看到应用程序代码的好方法吗?有没有更好的方法来实现这一点,或者我在如何构建我的项目结构方面做错了什么?
我看过一些使用 py.test
的其他项目(例如,pip
) ,但是我看不到这样的代码,但是运行 py.test tests
似乎可以。我不知道为什么,但我担心他们可能用更简单的方法得到了同样的结果。
我已经查看了 py.test
文档,但是我看不到对这个问题的解释,也看不到处理这个问题的推荐方法。