Framework UnitTest - Salta test

Il supporto per saltare i test è stato aggiunto da Python 2.7. È possibile saltare il metodo di test individuale o la classe TestCase, in modo condizionale e incondizionato. Il framework consente di contrassegnare un determinato test come "errore previsto". Questo test "fallirà" ma non verrà considerato come fallito in TestResult.

Per saltare un metodo incondizionatamente, è possibile utilizzare il seguente metodo di classe 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()

Poiché skip () è un metodo di classe, è preceduto da @ token. Il metodo accetta un argomento: un messaggio di log che descrive il motivo del salto.

Quando viene eseguito lo script precedente, sulla console viene visualizzato il seguente risultato:

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

OK (skipped = 1)

Il carattere "s" indica che un test è stato saltato.

La sintassi alternativa per saltare il test utilizza il metodo di istanza skipTest () all'interno della funzione di test.

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

I seguenti decoratori implementano il salto del test e gli errori previsti:

S.No. Metodo e descrizione
1

unittest.skip(reason)

Salta incondizionatamente il test decorato. il motivo dovrebbe descrivere il motivo per cui il test viene saltato.

2

unittest.skipIf(condition, reason)

Salta il test decorato se la condizione è vera.

3

unittest.skipUnless(condition, reason)

Salta il test decorato a meno che la condizione non sia vera.

4

unittest.expectedFailure()

Contrassegna il test come un fallimento previsto. Se il test fallisce durante l'esecuzione, il test non viene considerato un fallimento.

L'esempio seguente mostra l'utilizzo del salto condizionale e del fallimento previsto.

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

Nell'esempio precedente, testsub () e testdiv () verranno ignorati. Nel primo caso a> b è vero, mentre nel secondo caso b == 0 non è vero. D'altra parte, testmul () è stato contrassegnato come errore previsto.

Quando viene eseguito lo script precedente, due test ignorati mostrano "s" e l'errore previsto viene visualizzato come "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)