pytest可以捕获doctest的输出吗?

时间:2019-07-09 16:54:23

标签: python pytest doctest

我正在运行pytest的{​​{1}},没有其他选择。

我有一个--doctest-modules测试失败,并且我正在尝试通过在基础代码中添加doctest语句来调试问题。

捕获输出正在按常规(非{print())测试正常工作并显示,但是doctest测试没有在我的doctest输出中显示stdout,即使我pytest语句在那里发生。

我可以将print()重写为非doctest测试,以使那些doctest语句能够通过,但这听起来像是一件round回的事情。

是否可以告诉print()我也希望它捕获pytest的输出?

doctest

1 个答案:

答案 0 :(得分:2)

将我的评论变成答案:最简单的方法是打印到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 =====================================