您想unittest
为这样的函数编写-cases:
def test_me(a):
for b in c:
print do_something(a,b)
起初我想只收集do_something
一个字符串中的输出然后返回它,一起打印和测试整个输出。但这并不总是很方便,因为这样的循环可能会导致您的缓冲区字符串变得非常大,具体取决于具体情况。那么,当输出被打印但没有返回时,你能做些什么来测试输出呢?
您想unittest
为这样的函数编写-cases:
def test_me(a):
for b in c:
print do_something(a,b)
起初我想只收集do_something
一个字符串中的输出然后返回它,一起打印和测试整个输出。但这并不总是很方便,因为这样的循环可能会导致您的缓冲区字符串变得非常大,具体取决于具体情况。那么,当输出被打印但没有返回时,你能做些什么来测试输出呢?
print
打印到sys.stdout
,您可以根据需要将其重新分配给您自己的对象。您的对象唯一需要的是一个write
接受单个字符串参数的函数。
从 Python 2.6 开始,您还可以通过添加到脚本顶部来更改print
为函数而不是语言构造。from __future__ import print_function
这样你就可以print
用你自己的函数覆盖。
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()]