我试图使用py.test运行Python项目的单元测试。直到最近我还使用了鼻子并且它针对我的本地源代码而不是已安装的软件包运行测试,但py.test似乎想要针对已安装的软件包运行,这意味着我必须先运行python setup.py install
每次试运行。
项目的组织如下:
/project
/project
__init__.py
project_file.py
/test
__init__.py
/test_project
test_project_file.py
我发现让py.test针对本地代码运行的唯一方法是在top / project文件夹中运行python -m pytest
。这很奇怪,因为在同一位置运行py.test
会针对已安装的代码运行。根据{{3}},这些命令应该是等价的,并且--version为两者返回相同的信息。
有没有一种标准方法可以告诉py.test针对特定代码运行?我还没能在py.test的文档中找到一个明确的答案。
答案 0 :(得分:1)
我的第一个错误是使用python setup.py install
代替python setup.py develop
来设置我的项目。 Pytest希望你使用后者,这无论如何都是好习惯。
如果在安装相同代码时需要针对本地代码运行,似乎确实有办法实现。 This SO post提到了pytest的“隐藏功能”,你可以在你的根目录中放置一个conftest.py文件,告诉pytest使用你的本地代码运行。 Pytest似乎使用整个配置文件的位置来确定它认为你的根目录是什么。在我的例子中,这个文件是pytest.ini。
作为好奇心,我相信python -m pytest
使用py.test
所没有的本地代码运行是由于Python将其调用的目录添加到sys.path中的默认行为。