Ich versuche zu verstehen, was passiert, wenn mehrere Vererbungen mit einer unittest.TestCase
-Klasse durchgeführt werden.
MyTest_DoesWork
gibt aus, was ich erwarte, dies ist sowohl setUp()
als auch tearDown()
wird ausgelöst. Dies geschieht nicht mit MyTest_DoesNotWork
. Warum passiert dies? Irgendwelche Hinweise?
Pythons Methodenauflösungsreihenfolge verursacht dies. Mit Ihrer Vererbungsstruktur wird die Reihenfolge in der Reihenfolge aufgelöst, in der Sie die übergeordneten Klassen von links nach rechts deklariert haben.
Mit MyTest_DoesNotWork
wird also Python die unittest.TestCase
Implementierungen von setUp
und tearDown
treffen, die nichts bewirken. Weil unittest.TestCase.setUp
nicht kooperativ geschrieben ist und andere Methoden der Oberklasse setUp
aufruft, bleibt es dort stehen und nichts wird gedruckt.
Mit MyTest_DoesWork
wird Python stattdessen zuerst in MyClassTest1
aufgelöst. Genau wie unittest.TestCase
haben Sie Ihre Methoden setUp
und tearDown
nicht geschrieben, um gemeinsam Superklassenmethoden aufzurufen. Also hört es dort auf und ruft nie die Methoden MyClassTest2
auf. Ich vermute also, dass selbst das nicht funktioniert, wie Sie es erwartet haben. Ändern Sie Ihre Methoden MyClassTest1
setUp
und tearDown
, um "MyClassTest1" anstelle von self.class
auszudrucken, und Sie werden sehen, dass es immer aufgerufen wird. MyClassTest2
setUp
und tearDown
werden niemals aufgerufen.
Tags und Links python unit-testing inheritance