【发布时间】:2020-12-31 01:44:20
【问题描述】:
如果我的库有一个 contrib 附加组件,其中包含依赖项(例如 requests),我希望用户必须安装它才能访问 CLI API,但我在 CI 测试期间安装了附加组件如何在测试期间使用pytest's MonkeyPatch 去除依赖关系以确保我的检测正确?
例如,如果contrib 额外安装requests,那么我希望用户必须这样做
$ python -m pip install mylib[contrib]
然后能够在命令行拥有一个看起来像的 CLI API
$ mylib contrib myfunction
其中myfunction 使用requests 依赖项
# mylib/src/mylib/cli/contrib.py
import click
try:
import requests
except ModuleNotFoundError:
pass # should probably warn though, but this is just an example
# ...
@click.group(name="contrib")
def cli():
"""
Contrib experimental operations.
"""
@cli.command()
@click.argument("example", default="-")
def myfunction(example):
requests.get(example)
# ...
我如何在我的pytest 测试中模拟或修改requests out,这样我就可以确保用户会正确地收到警告以及ModuleNotFoundError 如果他们只是这样做
$ python -m pip install mylib
$ mylib contrib myfunction
?在阅读了关于 pytest 标签的其他一些问题后,我仍然认为我不明白如何做到这一点,所以我在这里问。
【问题讨论】:
-
this 回答你的问题了吗?
-
感谢您的回复,但也许我应该指定在 pytest 测试中我使用 pytest-console-scripts 中的 script_runner 夹具来确保我实际上正在测试 CLI 功能。我同意在大多数情况下,Mock import example 之类的东西会起作用,但我需要解决的跑步者状态似乎存在问题。
标签: python pytest monkeypatching pytest-mock