Fügen Sie Log-Trennzeichen zu allen Vorrichtungen in unittests hinzu

Ich benutze ein unentdecktes Modul. Ich muss setUp, setUpClass, teardown und teardownClass logs von unittests logs trennen. Ausgabe sollte so aussehen:

**************setting things up************** INFO: preparing database INFO: create new users **************end of setup**************** INFO: starting test one INFO: ... **************Cleaning things************** INFO: delete users ... 

Ich habe versucht, einige Funktionen in unittest.suite (_handleClassSetUp, _handleModuleFixtures, _tearDownPreviousClass) zu überschreiben, um Trennzeichen vor und nach dem Aufruf zu protokollieren. Als Ergebnis werden Trennzeichen protokolliert, auch wenn Testfall keine setUpClass und tearDownClass enthält. Und noch, es gibt keine Trennzeichen für Setup und Teardown.

Wie kann man das machen?

One Solution collect form web for “Fügen Sie Log-Trennzeichen zu allen Vorrichtungen in unittests hinzu”

Sie können eine Metaklasse verwenden, um diese Funktionalität zu erreichen. Alles, was es tut, ist auf der Suche nach einer Liste von Funktionsnamen, die Sie zur Verfügung stellen, und dann die Anwendung eines Dekorateurs auf diese Funktionen. Der Dekorator behandelt Druckeintrags- und -ausgangsanweisungen.

 import functools import unittest FUNCTIONS_TO_LOG = ('setUp', 'tearDown') def log_start_and_end(f): @functools.wraps(f) def wrapper(*args, **kwargs): print '********** start {}'.format(f.__name__) f(*args, **kwargs) print '********** end {}'.format(f.__name__) return wrapper class LoggingMeta(type): def __new__(cls, name, bases, namespace): for attr, obj in namespace.items(): if attr in FUNCTIONS_TO_LOG: namespace[attr] = log_start_and_end(obj) return super(LoggingMeta, cls).__new__(cls, name, bases, namespace) class BaseTest(unittest.TestCase): __metaclass__ = LoggingMeta def setUp(self): print 'inside setup' def tearDown(self): print 'inside teardown' def test_test(self): print 'inside test' if __name__ == '__main__': unittest.main() 

Dies führt zu einer Ausgabe:

 ********** start setUp inside setup ********** end setUp inside test ********** start tearDown inside teardown ********** end tearDown . 

 Ran 1 test in 0.000s OK 
  • Wie kann ich eine Pyramide in Python erstellen?
  • PATH Ausgabe mit pytest 'ImportError: Kein Modul namens YadaYadaYada'
  • Kann ich die Art von meinen Schein-Objekten in Python-Unentschieden fälschen
  • Sperren eines Django Querysets, um eine Funktion zu testen, die ein Quaryset nimmt
  • Wie kann ich Tests für Code mit twisted.web.client.Agent und seine Unterklassen schreiben?
  • Python unittest: wie man nur einen Teil einer Testdatei ausführt?
  • Zustand Abdeckung in Python
  • Python unittest assertRaises wirft aus, wenn assertRaises ausfällt
  • Gibt es ein bevorzugtes BDD-Style-Unit-Test-Framework für Python?
  • Python Mock Rückkehr von einem getattr () Anruf
  • Unit Testing Schnittstellen in Python
  • Python ist die beste Programmiersprache der Welt.