Ich bin nicht ganz sicher, ob ich Ihre Frage richtig verstanden, aber der folgende Code snipped Werke (2 Tests bestehen, 1 ausfällt):
import pytest
class __capsys_class__:
def readouterr(self, in_str):
return eval(in_str), None
@pytest.fixture(scope = 'module')
def capsys():
return __capsys_class__()
@pytest.mark.parametrize('in_param', [
('3+5', 8),
('2+4', 6),
('6*9', 42),
])
def test_printed_out_value(capsys, in_param):
test_input, expected = in_param
print(test_input) # Python 3 print function!
out, err = capsys.readouterr(test_input)
assert out == expected
Zuerst lege ich Befestigungen am Anfang der Liste immer von Argumenten. Scheint so zu arbeiten. Zweitens, ich sende deine Tupel so wie sie sind (in_param
) und entpacke sie innerhalb des Tests.
EDIT: stdout
wird erfasst und angezeigt, wenn ein Test fehlschlägt. Für den obigen Code, sieht es wie folgt aus:
~> pytest
========================================================== test session starts ===========================================================
platform linux -- Python 3.6.2, pytest-3.3.1, py-1.5.2, pluggy-0.6.0
rootdir: /home/ernst/Desktop/so/tests, inifile:
collected 3 items
test_demo.py ..F [100%]
================================================================ FAILURES ================================================================
___________________________________________________ test_printed_out_value[in_param2] ____________________________________________________
capsys = <test_demo.__capsys_class__ object at 0x7fd57e60c860>, in_param = ('6*9', 42)
@pytest.mark.parametrize('in_param', [
('3+5', 8),
('2+4', 6),
('6*9', 42),
])
def test_printed_out_value(capsys, in_param):
test_input, expected = in_param
print(test_input)
out, err = capsys.readouterr(test_input)
> assert out == expected
E assert 54 == 42
test_demo.py:21: AssertionError
---------------------------------------------------------- Captured stdout call ----------------------------------------------------------
6*9
=================================================== 1 failed, 2 passed in 0.03 seconds ===================================================
Überprüfen Sie die 6*9
in der zweiten bis letzten Zeile. Dies wurde von der Druckfunktion im Test gedruckt.