Python pytest:捕获标准输出总是失败
我试图捕获pytest(Python版本3.6)中stdout/print语句的输出 这总是失败的:Python pytest:捕获标准输出总是失败,python,unit-testing,tdd,pytest,Python,Unit Testing,Tdd,Pytest,我试图捕获pytest(Python版本3.6)中stdout/print语句的输出 这总是失败的: message = 'The meaning of life is not actually 42\n' def print_greeting(): """print 42 to stdout""" # write to stdout sys.stdout.write(message) # this fails # print to st
message = 'The meaning of life is not actually 42\n'
def print_greeting():
"""print 42 to stdout"""
# write to stdout
sys.stdout.write(message) # this fails
# print to stdout
print('Message again: ', message) # this fails too
def test_printgreeting(capsys):
"""assert '42' was printed to stdout"""
# capture stdout / stderr
out, err = capsys.readouterr()
print_greeting()
# 42 should be in stdout from sys.stdout.write
assert '42' in out
测试结果:
========================================================= test session starts ==========================================================
collected 1 item
test.py
The meaning of life is not actually 42
F
=============================================================== FAILURES ===============================================================
__________________________________________________________ test_printgreeting __________________________________________________________
test.py:42: in test_printgreeting
assert '42' in out
E AssertionError: assert '42' in ''
======================================================= 1 failed in 0.03 seconds =======================================================
为什么不捕获此信息?您需要在打印以下内容后调用
readouterr
:
def test_printgreeting(capsys):
"""assert '42' was printed to stdout"""
# capture stdout / stderr
print_greeting()
out, err = capsys.readouterr()
# 42 should be in stdout from sys.stdout.write
assert '42' in out
打印后需要调用
readouterr
:
def test_printgreeting(capsys):
"""assert '42' was printed to stdout"""
# capture stdout / stderr
print_greeting()
out, err = capsys.readouterr()
# 42 should be in stdout from sys.stdout.write
assert '42' in out
天哪。我用头撞了三个小时,非常感谢,我的上帝。我用头撞了三个小时,非常感谢。