Wie kann ich eine Python-Unittest-Methode dekorieren, um zu überspringen, wenn eine Eigenschaft, die ich zuvor ausgewertet habe, nicht True ist?

8

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?

    
Andrew Ferrier 17.12.2014, 19:16
quelle

3 Antworten

4

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.

    
BrenBarn 17.12.2014, 19:31
quelle
3

Wenn Sie den isOnline Test außerhalb Ihrer setUp Methode verschieben können, dann ist das eine Lösung:

%Vor%

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.

    
Thomas Orozco 17.12.2014 19:28
quelle
0

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.

%Vor%     
Mukhtar 21.12.2016 15:03
quelle

Tags und Links