2017-09-13 8 views
0

は、pytest(Pythonバージョン3.6)のstdout/printステートメントからの出力をキャプチャしようとしています。Python pytest:stdoutをキャプチャすると常に失敗する

これは常に失敗します。pytestから

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 ======================================================= 

は、なぜこれが捕獲されていませんか?

答えて

2

あなたが印刷後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 
+0

私の神。私は3時間ほど頭に頭を打ちました。 >、< – emf

+0

ありがとうsooooo。 – emf

関連する問題