Se siete OK con l'aggiunta di un po 'di codice standard ai test, qualcosa come il seguente potrebbe funzionare.
In MyTest1, alla fine di ogni test viene chiamato il valore tearDown
e il valore di self.result è stato impostato su una tupla contenente il nome del metodo e un dizionario (ma è possibile impostarlo in base a ciò che si desidera). Il modulo di ispezione viene utilizzato per ottenere il nome del metodo, quindi tearDown
sa quale test è stato appena eseguito.
In MyTest2, tutte i risultati vengono salvati in un dizionario (results
), che si può fare con quello che ti piace nel metodo tearDownClass
.
import inspect
import unittest
class MyTest1(unittest.TestCase):
result = None
def tearDown(self):
print "tearDown:", self.result
def test_aaa(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.result = (name, None)
x = 1 + 1
self.assertEqual(x, 2)
self.result = (name, dict(x=x))
def test_bbb(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.result = (name, None)
# Intentional fail.
x = -1
self.assertEqual(x, 0)
self.result = (name, dict(x=x))
class MyTest2(unittest.TestCase):
results = {}
@classmethod
def tearDownClass(cls):
print "tearDownClass:", cls.results
def test_aaa(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.results[name] = None
x = 1 + 1
self.assertEqual(x, 2)
self.results[name] = dict(x=x)
def test_bbb(self):
frame = inspect.currentframe()
name = inspect.getframeinfo(frame).function
del frame
self.results[name] = None
x = -1
self.assertEqual(x, 0)
self.results[name] = dict(x=x)
if __name__ == '__main__':
unittest.main()
fonte
2012-09-06 04:20:38
Poiché questo è un po 'hacker e probabilmente fragile (ad esempio non testato in python 3), il downvote è Probabilmente non lo userei nel mio codice di produzione, d'altro canto, sembra funzionare, la praticità batte la purezza e tutto il resto. –