Was ist der Unterschied zwischen setUp()
und setUpClass()
im Python- unittest
Framework? Warum sollte das Setup in einer Methode über der anderen behandelt werden?
Ich möchte verstehen , was Teil der Installation in den erfolgt setUp()
und setUpClass()
Funktionen, sowie mit tearDown()
und tearDownClass()
.
unittest
ein Test wird erst dann bestanden, wenn ertearDown
ohne Zwischenfälle abgeschlossen wurde.setUp
undtearDown
sind jeweils läuft einmal für jedetest
Methode (so insgesamt zweimal in diesem Beispiel) , abersetUpClass
undtearDownClass
sind nur einmal pro laufen.Was ist der Unterschied zwischen
setUp()
undsetUpClass()
im Python-unittest
Framework?Der Hauptunterschied (wie in der Antwort von Benjamin Hodgson erwähnt) besteht darin, dass
setUpClass
er nur einmal und vor allen TestssetUp
aufgerufen wird , während er unmittelbar vor jedem einzelnen Test aufgerufen wird. (Hinweis: Gleiches gilt für die entsprechenden Methoden in anderen xUnit-Testframeworks, nicht nur für Pythonsunittest
.)Aus der
unittest
Dokumentation :und:
Warum sollte das Setup in einer Methode über der anderen behandelt werden?
Dieser Teil der Frage wurde noch nicht beantwortet. Gemäß meinem Kommentar als Antwort auf die Antwort von Gearon ist die
setUp
Methode für Elemente des Geräts gedacht, die allen Tests gemeinsam sind (um zu vermeiden, dass dieser Code in jedem Test dupliziert wird). Ich finde dies oft nützlich, da das Entfernen von Duplikaten (normalerweise) die Lesbarkeit verbessert und den Wartungsaufwand verringert.Die
setUpClass
Methode ist für teure Elemente gedacht, die Sie lieber nur einmal ausführen müssen, z. B. das Öffnen einer Datenbankverbindung, das Öffnen einer temporären Datei im Dateisystem, das Laden einer gemeinsam genutzten Bibliothek zum Testen usw. Wenn Sie solche Dinge vor jedem Test ausführen, wird der Vorgang verlangsamt Testsuite zu viel, deshalb machen wir es nur einmal vor allen Tests. Dies ist eine leichte Verschlechterung der Unabhängigkeit der Tests, in einigen Situationen jedoch eine notwendige Optimierung. Vermutlich sollte man solche Dinge nicht in Unit-Tests tun, da es normalerweise möglich ist, die Datenbank / das Dateisystem / die Bibliothek / was auch immer zu verspotten, ohne die reale Sache zu verwenden. Als solches finde ich, dasssetUpClass
das selten benötigt wird. Dies ist jedoch nützlich, wenn das Testen der obigen Beispiele (oder ähnlicher Beispiele) erforderlich wird.quelle