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 
  • Erstellen Sie ein Klickereignis in tkinter
  • Wie Stress Python-Methoden ohne Mock
  • Django-Test FileField mit Testbefestigungen
  • Neo4j ImpermanentDatabase in python unittests
  • Ist pytest parametrisierte Testarbeit mit unertesten klassenbasierten Tests?
  • Wie kann ich den mock.patch auf die setUp verschieben?
  • Unit Testing Schnittstellen in Python
  • Gibt es irgendeine Möglichkeit, mit Python zu benachrichtigen, wenn ein iterable nicht leer ist?
  • Wie kann ich eine Datenbank für Django-Tests angeben, anstatt sie gleichzeitig zu bauen?
  • Unbenannte überspringen, wenn eine Bedingung in SetUpClass fehlschlägt
  • Python-Unit-Test für verschachtelte if-Anweisung
  • Python ist die beste Programmiersprache der Welt.