断言可以与python中的print语句进行比较吗?
def printname(name):
print(name)
#to not raise an error:
assert printname("Hello") == "Hello"
#to raise an error:
assert printname("Hello") == "notHello"
不,断言不能这样做。如果你想这样做,试试这个:
def printname(name):
print(name)
return name
#to not raise an error:
assert printname("Hello") == "Hello"
#to raise an error:
assert printname("Hello") == "notHello"
这在技术上不能比较它,但它是一个有效的解决方法。如果你真的想比较它们,看看StringIO
.
尝试使用 mock + stringIO 来捕获标准输出/错误:
from mock import patch
from StringIO import StringIO
def test_foobar():
out, err = StringIO(), StringIO()
with patch.multiple(sys, stdout=out, stderr=err):
do_stuff()
assert out.getvalue() == 'foo'
assert err.getvalue() == 'bar'
此外,如果您在测试框架内执行此操作,则可以执行各种操作。 特别是对于 pytest:
def test_myoutput(capsys): # or use "capfd" for fd-level
print("hello")
sys.stderr.write("worldn")
captured = capsys.readouterr()
assert captured.out == "hellon"
assert captured.err == "worldn"
print("next")
captured = capsys.readouterr()
assert captured.out == "nextn"
No.函数 printname 没有显式的 return 语句,因此它返回值 .因此,断言将 None 与字符串进行比较,当然它会引发断言错误。