Framework UnitTest - Ignorer le test

La prise en charge du saut de tests a été ajoutée depuis Python 2.7. Il est possible d'ignorer une méthode de test individuelle ou une classe TestCase, de manière conditionnelle ou inconditionnelle. Le cadre permet à un certain test d'être marqué comme un «échec attendu». Ce test «échouera» mais ne sera pas compté comme ayant échoué dans TestResult.

Pour ignorer une méthode sans condition, la méthode de classe unittest.skip () suivante peut être utilisée -

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()

Puisque skip () est une méthode de classe, elle est préfixée par @ token. La méthode prend un argument: un message de journal décrivant la raison du saut.

Lorsque le script ci-dessus est exécuté, le résultat suivant s'affiche sur la console -

C:\Python27>python skiptest.py
s
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK (skipped = 1)

Le caractère «s» indique qu'un test a été ignoré.

Une autre syntaxe pour sauter le test consiste à utiliser la méthode d'instance skipTest () dans la fonction de test.

def testadd2(self):
   self.skipTest("another method for skipping")
   self.assertTrue(add(4 + 5) == 10)

Les décorateurs suivants implémentent le saut de test et les échecs attendus -

S.No. Méthode et description
1

unittest.skip(reason)

Sautez sans condition le test décoré. la raison doit décrire pourquoi le test est ignoré.

2

unittest.skipIf(condition, reason)

Ignorez le test décoré si la condition est vraie.

3

unittest.skipUnless(condition, reason)

Ignorez le test décoré sauf si la condition est vraie.

4

unittest.expectedFailure()

Marquez le test comme un échec attendu. Si le test échoue lors de l'exécution, le test n'est pas compté comme un échec.

L'exemple suivant illustre l'utilisation du saut conditionnel et de l'échec attendu.

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()

Dans l'exemple ci-dessus, testsub () et testdiv () seront ignorés. Dans le premier cas, a> b est vrai, tandis que dans le second cas, b == 0 n'est pas vrai. D'autre part, testmul () a été marqué comme échec attendu.

Lorsque le script ci-dessus est exécuté, deux tests ignorés affichent «s» et l'échec attendu est indiqué par «x».

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)