我使用easy_install在Mac上安装pytest,并开始为一个具有如下文件结构的项目编写测试:
repo/
|--app.py
|--settings.py
|--models.py
|--tests/
|--test_app.py
py运行。在repo目录中进行测试,一切都如您所料。
但是当我在Linux或Windows上尝试同样的事情时(两者都有pytest 2.2.3),每当它第一次从我的应用程序路径导入某些东西时,它就会发出吠叫。例如,from app import some_def_in_app。
我需要编辑我的PATH来运行py。测试这些系统?
正如Luiz Lezcano Arialdi所指出的,正确的解决方案是将您的包安装为可编辑包。
因为我正在使用Pipenv,所以我考虑在他的回答中逐步添加如何使用Pipenv将当前路径安装为可食用路径,允许运行pytest而不需要任何破坏代码或丢失文件。
你需要有以下最小的文件夹结构(文档):
package/
package/
__init__.py
module.py
tests/
module_test.py
setup.py
Setup.py主要有以下最小代码(文档):
import setuptools
setuptools.setup(name='package', # Change to your package name
packages=setuptools.find_packages())
然后你只需要运行pipenv install——dev -e。Pipenv将当前路径安装为可编辑包(——dev标志是可选的)(文档)。
现在您应该能够毫无问题地运行pytest了。
我得到这个错误,因为我使用相对导入不正确。在OP示例中,test_app.py应该使用e.g.导入函数。
from repo.app import *
然而,尽管__init__.py文件分散在文件结构中,但这不会起作用,并会创建所见的ImportError类型,除非文件和测试文件在同一目录中。
from app import *
以下是我在一个项目中所做的一个例子:
这是我的项目结构:
microbit/
microbit/activity_indicator/activity_indicator.py
microbit/tests/test_activity_indicator.py
为了能够从test_activity_indicator.py访问activity_indicator.py,我需要:
使用正确的相对导入启动test_activity_indicator .py:
from microbit.activity_indicator.activity_indicator import *
在整个项目结构中放置__init__.py文件:
microbit/
microbit/__init__.py
microbit/activity_indicator/__init__.py
microbit/activity_indicator/activity_indicator.py
microbit/tests/__init__.py
microbit/tests/test_activity_indicator.py
正如Luiz Lezcano Arialdi所指出的,正确的解决方案是将您的包安装为可编辑包。
因为我正在使用Pipenv,所以我考虑在他的回答中逐步添加如何使用Pipenv将当前路径安装为可食用路径,允许运行pytest而不需要任何破坏代码或丢失文件。
你需要有以下最小的文件夹结构(文档):
package/
package/
__init__.py
module.py
tests/
module_test.py
setup.py
Setup.py主要有以下最小代码(文档):
import setuptools
setuptools.setup(name='package', # Change to your package name
packages=setuptools.find_packages())
然后你只需要运行pipenv install——dev -e。Pipenv将当前路径安装为可编辑包(——dev标志是可选的)(文档)。
现在您应该能够毫无问题地运行pytest了。