2017-09-13 2 views
0

J'essaye de capturer la sortie des instructions stdout/print dans pytest (Python version 3.6).Python pytest: la capture stdout échoue toujours

Cela échoue toujours:

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 

Résultats de pytest:

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

Pourquoi est-ce pas pris?

Répondre

2

Vous devez appeler readouterraprès imprimer:

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

Mon dieu. Je me suis cogné la tête contre cela pendant trois heures. >, < – emf

+0

Merci beaucoup. – emf