[英]Can pytest capture output from a doctest?
我正在使用--doctest-modules
運行pytest
而沒有其他選項。
我有一個失敗的doctest
測試,我正在嘗試通過向底層代碼添加print()
語句來調試問題。
對於我的常規(非doctest
)測試,捕獲輸出正在工作並按預期顯示,但是doctest
測試沒有在我的pytest
輸出中顯示 stdout,即使我在那里發生了print()
語句。
我可以將我的doctest
重寫為非doctest
測試,以便讓那些print()
語句流過,但這聽起來非常迂回。
有什么方法可以告訴pytest
我也希望它捕獲doctest
的輸出?
$ 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 =====================================
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.