Marco UnitTest - Omitir prueba

Se ha agregado soporte para omitir pruebas desde Python 2.7. Es posible omitir el método de prueba individual o la clase TestCase, tanto condicional como incondicionalmente. El marco permite que una determinada prueba se marque como un "error esperado". Esta prueba 'fallará' pero no se contará como fallada en TestResult.

Para omitir un método incondicionalmente, se puede usar el siguiente método de clase unittest.skip ():

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

Dado que skip () es un método de clase, tiene el prefijo @ token. El método toma un argumento: un mensaje de registro que describe el motivo del salto.

Cuando se ejecuta el script anterior, se muestra el siguiente resultado en la consola:

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

OK (skipped = 1)

El carácter 's' indica que se ha omitido una prueba.

La sintaxis alternativa para omitir la prueba es usar el método de instancia skipTest () dentro de la función de prueba.

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

Los siguientes decoradores implementan saltos de prueba y fallas esperadas:

S.No. Método y descripción
1

unittest.skip(reason)

Salte incondicionalmente la prueba decorada. El motivo debe describir por qué se omite la prueba.

2

unittest.skipIf(condition, reason)

Omita la prueba decorada si la condición es verdadera.

3

unittest.skipUnless(condition, reason)

Omita la prueba decorada a menos que la condición sea verdadera.

4

unittest.expectedFailure()

Marque la prueba como un error esperado. Si la prueba falla cuando se ejecuta, la prueba no se cuenta como falla.

El siguiente ejemplo demuestra el uso de la omisión condicional y la falla esperada.

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

En el ejemplo anterior, se omitirán testsub () y testdiv (). En el primer caso a> b es cierto, mientras que en el segundo caso b == 0 no es cierto. Por otro lado, testmul () se ha marcado como error esperado.

When the above script is run, two skipped tests show 's' and the expected failure is shown as '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)