Estrutura UnitTest - Ignorar teste

O suporte para pular testes foi adicionado desde Python 2.7. É possível pular o método de teste individual ou classe TestCase, condicionalmente ou incondicionalmente. A estrutura permite que um determinado teste seja marcado como uma 'falha esperada'. Este teste 'falhará', mas não será contado como falha no TestResult.

Para pular um método incondicionalmente, o seguinte método de classe unittest.skip () pode ser usado -

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

Como skip () é um método de classe, ele é prefixado por @ token. O método tem um argumento: uma mensagem de log que descreve o motivo do salto.

Quando o script acima é executado, o seguinte resultado é exibido no console -

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

OK (skipped = 1)

O caractere 's' indica que um teste foi ignorado.

A sintaxe alternativa para pular o teste é usar o método de instância skipTest () dentro da função de teste.

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

Os decoradores a seguir implementam o salto de teste e as falhas esperadas -

S.No. Método e Descrição
1

unittest.skip(reason)

Ignore incondicionalmente o teste decorado. motivo deve descrever por que o teste está sendo ignorado.

2

unittest.skipIf(condition, reason)

Pule o teste decorado se a condição for verdadeira.

3

unittest.skipUnless(condition, reason)

Pule o teste decorado, a menos que a condição seja verdadeira.

4

unittest.expectedFailure()

Marque o teste como uma falha esperada. Se o teste falhar ao ser executado, ele não será contado como uma falha.

O exemplo a seguir demonstra o uso de salto condicional e falha 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()

No exemplo acima, testsub () e testdiv () serão ignorados. No primeiro caso, a> b é verdadeiro, enquanto no segundo caso b == 0 não é verdadeiro. Por outro lado, testmul () foi marcado como falha esperada.

Quando o script acima é executado, dois testes ignorados mostram 's' e a falha esperada é exibida como '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)