python - pytest 可以从 doctest 捕获输出吗?
问题描述
我正在运行pytest
,--doctest-modules
没有其他选择。
我有一个doctest
失败的测试,我试图通过向print()
底层代码添加语句来调试问题。
对于我的常规(非)测试,捕获输出正在工作并按预期显示doctest
,但doctest
测试没有在我的输出中显示标准pytest
输出,即使我在那里print()
发生了语句。
我可以将 my 重写doctest
为非doctest
测试,以使这些print()
语句通过,但这听起来像是一个非常迂回的事情。
有什么方法可以告诉pytest
我我希望它也捕获doctest
s 的输出吗?
$ python --version
Python 3.7.2
$ pytest --version
This is pytest version 3.10.1, imported from /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/pytest.py
setuptools registered plugins:
pytest-xdist-1.26.1 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/xdist/plugin.py
pytest-xdist-1.26.1 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/xdist/looponfail.py
pytest-pythonpath-0.7.3 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/pytest_pythonpath.py
pytest-mock-1.10.0 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/pytest_mock.py
pytest-forked-1.0.1 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/pytest_forked/__init__.py
hypothesis-4.4.1 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/hypothesis/extra/pytestplugin.py
flaky-3.5.3 at /home/gene/.pythonz/pythons/CPython-3.7.2/lib/python3.7/site-packages/flaky/flaky_pytest_plugin.py
解决方案
将我的评论变成答案:最简单的方法是打印到 stderr,因为doctest
仅捕获 stdout 进行比较。例子:
import sys
def greet(who):
"""Greet someone.
>>> greet('world')
'Hello world'
>>> greet('fizz')
'Hello fizz'
>>> greet('buzz')
'Hello buzz'
"""
print('input:', who, file=sys.stderr)
return f'Hello {who}'
运行测试:
$ pytest --doctest-modules -sv
======================================= test session starts ========================================
...
collected 1 item
spam.py::spam.greet input: world
input: fizz
input: buzz
PASSED
===================================== 1 passed in 0.03 seconds =====================================
推荐阅读
- javascript - 无法从反应下拉列表中更新上下文 API 状态
- firebase - Flutter Firebase Google Auth 在生产中不起作用
- mysql - Laravel 计算具有条件的两列的总和
- airflow - 无法访问 Airflow REST API
- javascript - 从一组输入生成和渲染 html
- python - 无法在 ubuntu 20.04.3 Python 3.6.15 pip 21.2.4 上安装 tensorflow
- c# - 如何在常量c#中使用getproperty
- c - 使用 SO_REUSEADDR 和 SO_REUSEPORT 在两个套接字上接收相同的数据包
- c# - PDFsharp 1.32 到 1.50 更新
- kotlin - 默认情况下,Surface(color = MaterialTheme.colors.primary) 上的文本有点透明。我可以将所有文本可组合物设为 100% 不透明吗?