python - 如何使用本地模块防止pytest

标签 python unit-testing pytest pythonpath

作为引用,这是this question相反 .该问题询问如何让 pytest 使用您的本地模块。我想避免使用本地模块进行 pytest。

我需要测试模块的安装过程。我们都应该测试我们模块的安装过程。因此,我希望我的测试套件假装它是任何其他试图导入我安装的模块的 python 模块(无论它是否与我的最新编辑和/或可编辑安装是我的事)。

我的项目布局如下所示:

.
├── my_package
│   ├── __init__.py
│   └── my_module.py
├── setup.py
├── pyproject.toml
└── tests
    ├── conftest.py
    ├── __init__.py
    └── test_my_package.py

如果我

pip install .
cd tests
python -c "import my_package"

一切正常。但是,如果我

pip install .
pytest

它没有。这是因为 pytest 自动将调用目录添加到 PYTHONPATH,因此无法测试 pip install 是否有效。我希望它不要那样做。

我需要这样做,因为我正在使用 setuptools-scm(它在可编辑和不可编辑安装中有不同的行为)和 setuptools.find_packages,这使得它容易忽略的子包。但是,重申一下,我的问题是 pytest 的发现,而不是这两个实用程序的使用。

最佳答案

请参阅 pytest import mechanisms and sys.path/PYTHONPATH 的文档,它描述了三种控制此行为的导入模式。例如,试试这个:

$ pytest --import-mode=importlib

它使用 importlib导入测试模块,而不是操作 sys.pathPYTHONPATH

关于python - 如何使用本地模块防止pytest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67176036/

相关文章:

unit-testing - 如何使用NHibernate有效地进行TDD?

python - 如何将 parser.addoption 放在测试模块中,而不是放在 conftest.py 中?

python - 为什么 pytest 在仅运行一部分测试时不加载 conftest.py?

python - {built-in method select} 在 Python 3 中做什么?

Python 在我的查询参数中添加单引号

python - 鸢尾花数据集的多类分类

unit-testing - 在 Angular 2.1.0 Webpack 上设置单元测试代码覆盖率

Angular2 单元测试不使用模拟服务

python - 如何在异步单元测试中模拟方法?

python - 使用 Pandas 合并数据框