25

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

def test_me(a):
    for b in c:
        print do_something(a,b)

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

4

2 回答 2

13

print打印到sys.stdout,您可以根据需要将其重新分配给您自己的对象。您的对象唯一需要的是一个write接受单个字符串参数的函数。

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

于 2012-06-20T15:18:29.150 回答
6

unittest.mock在 Python 3中,内置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()]
于 2018-06-07T11:57:25.320 回答