Ich schreibe einen Testfall in Python mit unittest , der ungefähr so aussieht:
%Vor% Das scheint jedoch nicht zu funktionieren, nehme ich an, weil @skipIf
self
nicht außerhalb des Rumpfes der Funktionsdeklaration verwenden kann. Ich weiß, dass ich den Wert von self.isOnline
in der Funktion test_xyz
überprüfen und stattdessen skipTest
verwenden kann, aber das ist weniger elegant. Gibt es noch andere Optionen?
Sie könnten Ihren eigenen Dekorator schreiben, an den Sie den Namen des Flags übergeben:
%Vor%Dann würden Sie in Ihrer Klasse die Testmethode wie folgt definieren:
%Vor%Ob dies besser ist als nur das Einchecken der Methode hängt von der Situation ab. Wenn Sie dies mit vielen Methoden tun, könnte es besser sein, als den Scheck in jedem einzelnen zu schreiben. Auf der anderen Seite, wenn Sie das tun, möchten Sie sie vielleicht zusammen gruppieren und eine Überprüfung durchführen, um die gesamte Suite zu überspringen.
Wenn Sie den isOnline
Test außerhalb Ihrer setUp
Methode verschieben können, dann ist das eine Lösung:
Eine andere (elegantere Option) wäre dann:
%Vor% Wenn dies jedoch für Sie nicht möglich ist, dann gibt es keine elegantere Lösung als irgendwie skipTest()
zu verwenden.
skipIf
und skipUnless
werden bei der Deklaration der Klasse ausgewertet (sie setzen ein __unittest_skip__
-Attribut für Ihre Methode, um anzuzeigen, dass sie nicht ausgeführt werden sollte, was später vor dem Test überprüft wird). Ihre setUp
-Methode ist zu diesem Zeitpunkt noch nicht ausgeführt worden.
Ich würde die Antwort von BrenBarn hinzufügen, wenn Sie nosetests
verwenden, die Sie benötigen schmücken Sie die Funktion wrapper
mit @wraps
. Ohne diese wäre die Testfunktion technisch wrapper
und würde nicht von nosetests
aufgerufen, da die Testmethoden standardmäßig mit test_
beginnen müssen.
Tags und Links python unit-testing