断言可以与打印语句进行比较吗?



断言可以与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 与字符串进行比较,当然它会引发断言错误。

最新更新