Ich habe diesen Beispielcode (test_it.py
):Discard stdout/stderr von Programm im Test, aber halten Unittest Ausgabe
import sys
def give_me_5():
print >>sys.stdout, "STDOUT"
print >>sys.stderr, "STDERR"
return 6
import unittest
class TestMe(unittest.TestCase):
def setUp(self):
pass
def test_give_me_5(self):
self.assertEqual(give_me_5(), 5)
if __name__ == '__main__':
unittest.main()
die mir die folgende Ausgabe gibt:
» python -m unittest test_it
A long annoying output message
A long annoying error message
F
======================================================================
FAIL: test_give_me_5 (__main__.TestMe)
----------------------------------------------------------------------
Traceback (most recent call last):
File "xx.py", line 17, in test_give_me_5
self.assertEqual(give_me_5(), 5)
AssertionError: 6 != 5
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
Aber wegen der lange, lästige Nachrichten produziert von dem Programm im Test (das echte Programm produziert viele Ausgänge), ich bin nicht in der Lage, die Ausgabe von unittest zu sehen. Ich würde gerne den stdout/stderr der zu testenden Funktion loswerden (give_me_5
), aber ich möchte immer noch stdout/stderr von unittest
sehen. Ich möchte dieses Ergebnis erhalten:
» python -m unittest test_it
F
======================================================================
FAIL: test_give_me_5 (__main__.TestMe)
----------------------------------------------------------------------
Traceback (most recent call last):
File "xx.py", line 17, in test_give_me_5
self.assertEqual(give_me_5(), 5)
AssertionError: 6 != 5
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
Damit die Ausgabe durch das Programm im Test (beide stdout und stderr) erzeugt wird, durch Unittest herausgefiltert, aber die Ausgabe produziert von Unittest selbst gehalten wird. Ich möchte den zu testenden Code nicht ändern (keine Umleitung im Code selbst). Ich möchte nur unittest sagen, dass alle Ausgaben zu stdout/stderr, die durch den getesteten Code erzeugt werden, verworfen werden sollten.
Ist das möglich?
mögliches Duplikat von [python - Wie kann ich die Ausgabe von unittest umleiten? Offensichtliche Lösung funktioniert nicht] (http://stackoverflow.com/questions/14246119/python-how-can-i-redirect-the-output-of-unittest-obvious-solution-doesnt-wor) –
@DougR. Diese andere Frage betrifft das gegenteilige Problem: Der Typ hat die Ausgabe des Programms und die Ausgabe von unitest geteilt, was genau das ist, was ich erreichen wollte. – dangonfast