如何测试打印报表?

eri*_*ork 18 python unit-testing stdout

你想unittest为这样的函数编写-cases:

def test_me(a):
    for b in c:
        print do_something(a,b)
Run Code Online (Sandbox Code Playgroud)

起初我想过只收集do_something字符串中的输出然后返回它,一起打印和测试整个输出.但它并不总是很方便,因为这样的循环可能会导致缓冲区字符串变得非常大,具体取决于具体情况.那么,在打印并且不返回输出时,您可以做些什么来测试输出?

Emi*_*röm 12

print打印到sys.stdout,如果您愿意,可以将其重新分配给您自己的对象.您的对象唯一需要的是一个write带有单个字符串参数的函数.

从Python 2.6开始,您可以print通过添加from __future__ import print_function到脚本顶部来更改为函数而不是语言构造.这样您就可以print使用自己的功能覆盖.


Tom*_*Tom 5

在 Python 3 中,它很容易unittest.mock在内置print函数上使用:

from unittest.mock import patch, call

@patch('builtins.print')
def test_print(mocked_print):
    print('foo')
    print()

    assert mocked_print.mock_calls == [call('foo'), call()]
Run Code Online (Sandbox Code Playgroud)

  • 同样的事情,其他语法:`with unittest.mock.patch('builtins.print') as mocked_print:` (3认同)