Schreiben Sie eine pytest Funktion zur überprüfung der Ausgabe auf die Konsole (stdout)
Dieser link gibt es eine Beschreibung wie zu verwenden pytest für die Erfassung Konsole-Ausgaben.
Ich habe versucht, auf diesem folgenden einfachen code, aber ich bekomme Fehler
import sys
import pytest
def f(name):
print "hello "+ name
def test_add(capsys):
f("Tom")
out,err=capsys.readouterr()
assert out=="hello Tom"
test_add(sys.stdout)
Ausgabe:
python test_pytest.py
hello Tom
Traceback (most recent call last):
File "test_pytest.py", line 12, in <module>
test_add(sys.stdout)
File "test_pytest.py", line 8, in test_add
out,err=capsys.readouterr()
AttributeError: 'file' object has no attribute 'readouterr'
was falsch ist und was fix benötigt? danke
BEARBEITEN:
Als pro Kommentar, den ich geändert habe capfd
, aber ich bekomme immer noch den gleichen Fehler
import sys
import pytest
def f(name):
print "hello "+ name
def test_add(capfd):
f("Tom")
out,err=capfd.readouterr()
assert out=="hello Tom"
test_add(sys.stdout)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die
capfd
Leuchte.Beispiel:
Finden Sie unter: http://pytest.org/en/latest/fixture.html für mehr details
Und siehe:
py.test --fixtures
für eine Liste der eingebauten Armaturen.Dein Beispiel hat ein paar Probleme. Hier ist eine korrigierte version:
Hinweis:
sys.stdout
-- Verwenden Sie dencapfd
Vorrichtung ist vorgesehen pytest.py.test foo.py
Testlauf Ausgabe:
Beachten Sie Auch:
py.test
(Die CLI-Tools und Test-Runner) tut dies für Sie.py.der test unterscheidet vor allem drei Dinge:
Standardmäßig
py.test
sucht (konfigurierbare iirc)test_foo.py
test-Module und -test_foo()
test-Funktionen in der test-Module.test_f(capfd)
im code, ist das ok?py.test
tut dies für Sie. Es macht drei Dinge (vor allem): 1) sammeln Sie alle Ihre tests, 2) führen Sie alle tests und 3) erstellt Statistiken und Fehlermeldungentest_foo.py
Module undtest_foo()
Funktion in diese test-Module.Das problem ist, mit dem expliziten Aufruf der test-Funktion am Ende Ihres ersten code-snippet block:
Sollten Sie dies nicht tun; es ist pytest job zu rufen, Ihre test-Funktionen.
Wenn es das tut, erkennt den Namen
capsys
(odercapfd
, für diese Angelegenheit)und automatisch eine geeignete pytest-internes Objekt für Sie als Aufruf-argument.
(Die Beispiel in der Dokumentation pytest ist ganz abgeschlossen, wie es ist.)
Diesem Objekt wird die erforderliche
readouterr()
Funktion.sys.stdout
nicht, dass die Funktion, die ist, warum dein Programm nicht.