Python Mehrfachvererbung unittest -

8

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?

%Vor%     
luismartingil 19.09.2013, 14:04
quelle

1 Antwort

3

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.

    
reteptilian 03.03.2015 19:46
quelle