Ho questo codice di esempio (test_it.py
):Scartare output/error del programma in prova, ma mantenere unittest uscita
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()
che mi dà il seguente risultato:
» 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)
Ma a causa della lunghi, fastidiosi messaggi prodotti dal programma sotto test (il programma reale produce MOLTI output), non riesco a vedere l'output da unittest. Mi piacerebbe sbarazzarmi dello stdout/stderr della funzione in prova (give_me_5
), ma voglio ancora vedere stdout/stderr di unittest
. Vorrei ottenere questo risultato:
» 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)
In modo che l'output prodotto dal programma in prova (sia stdout e stderr) viene filtrato da unittest, ma l'output prodotto da unittest stesso è mantenuto. Non voglio modificare il codice in fase di test (nessun reindirizzamento nel codice stesso). Voglio solo dire all'unittest che tutti gli output di stdout/stderr generati dal codice sotto test dovrebbero essere scartati.
È possibile?
possibile duplicato di [python - come posso reindirizzare l'output di unittest? La soluzione ovvia non funziona] (http://stackoverflow.com/questions/14246119/python-how-can-i-redirect-the-output-of-unittest-obvious-solution-doesnt-wor) –
@DougR. L'altra domanda riguarda il problema opposto: il ragazzo stava ottenendo l'output del programma e l'output di unittest diviso, che è esattamente quello che volevo ottenere. – dangonfast