UnitTest Framework - Test überspringen
Die Unterstützung für das Überspringen von Tests wurde seit Python 2.7 hinzugefügt. Es ist möglich, einzelne Testmethoden oder TestCase-Klassen sowohl bedingt als auch bedingungslos zu überspringen. Das Framework ermöglicht es, einen bestimmten Test als "erwarteten Fehler" zu markieren. Dieser Test schlägt fehl, wird jedoch in TestResult nicht als fehlgeschlagen gezählt.
Um eine Methode bedingungslos zu überspringen, kann die folgende Klassenmethode unittest.skip () verwendet werden:
import unittest
def add(x,y):
return x+y
class SimpleTest(unittest.TestCase):
@unittest.skip("demonstrating skipping")
def testadd1(self):
self.assertEquals(add(4,5),9)
if __name__ == '__main__':
unittest.main()
Da skip () eine Klassenmethode ist, wird @ token vorangestellt. Die Methode verwendet ein Argument: eine Protokollnachricht, die den Grund für das Überspringen beschreibt.
Wenn das obige Skript ausgeführt wird, wird das folgende Ergebnis auf der Konsole angezeigt:
C:\Python27>python skiptest.py
s
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK (skipped = 1)
Das Zeichen 's' zeigt an, dass ein Test übersprungen wurde.
Die alternative Syntax zum Überspringen des Tests verwendet die Instanzmethode skipTest () innerhalb der Testfunktion.
def testadd2(self):
self.skipTest("another method for skipping")
self.assertTrue(add(4 + 5) == 10)
Die folgenden Dekorateure implementieren das Überspringen von Tests und erwartete Fehler -
S.No. | Methode & Beschreibung |
---|---|
1 | unittest.skip(reason) Überspringen Sie unbedingt den dekorierten Test. Der Grund sollte beschreiben, warum der Test übersprungen wird. |
2 | unittest.skipIf(condition, reason) Überspringen Sie den dekorierten Test, wenn die Bedingung erfüllt ist. |
3 | unittest.skipUnless(condition, reason) Überspringen Sie den dekorierten Test, es sei denn, die Bedingung ist erfüllt. |
4 | unittest.expectedFailure() Markieren Sie den Test als erwarteten Fehler. Wenn der Test beim Ausführen fehlschlägt, wird der Test nicht als Fehler gezählt. |
Das folgende Beispiel zeigt die Verwendung des bedingten Überspringens und des erwarteten Fehlers.
import unittest
class suiteTest(unittest.TestCase):
a = 50
b = 40
def testadd(self):
"""Add"""
result = self.a+self.b
self.assertEqual(result,100)
@unittest.skipIf(a>b, "Skip over this routine")
def testsub(self):
"""sub"""
result = self.a-self.b
self.assertTrue(result == -10)
@unittest.skipUnless(b == 0, "Skip over this routine")
def testdiv(self):
"""div"""
result = self.a/self.b
self.assertTrue(result == 1)
@unittest.expectedFailure
def testmul(self):
"""mul"""
result = self.a*self.b
self.assertEqual(result == 0)
if __name__ == '__main__':
unittest.main()
Im obigen Beispiel werden testsub () und testdiv () übersprungen. Im ersten Fall ist a> b wahr, während im zweiten Fall b == 0 nicht wahr ist. Andererseits wurde testmul () als erwarteter Fehler markiert.
Wenn das obige Skript ausgeführt wird, zeigen zwei übersprungene Tests 's' und der erwartete Fehler wird als 'x' angezeigt.
C:\Python27>python skiptest.py
Fsxs
================================================================
FAIL: testadd (__main__.suiteTest)
Add
----------------------------------------------------------------------
Traceback (most recent call last):
File "skiptest.py", line 9, in testadd
self.assertEqual(result,100)
AssertionError: 90 != 100
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (failures = 1, skipped = 2, expected failures = 1)