UnitTest Framework - Framework

"unittest" supporta l'automazione dei test, la condivisione del codice di configurazione e spegnimento per i test, l'aggregazione dei test in raccolte e l'indipendenza dei test dal framework di reporting.

Il modulo unittest fornisce classi che facilitano il supporto di queste qualità per una serie di test.

Per raggiungere questo obiettivo, unittest supporta i seguenti importanti concetti:

  • test fixture- Rappresenta la preparazione necessaria per eseguire uno o più test e qualsiasi azione di pulizia associata. Ciò può comportare, ad esempio, la creazione di directory, database temporanei o proxy o l'avvio di un processo del server.

  • test case- Questa è la più piccola unità di test. Questo verifica una risposta specifica a un particolare insieme di input. unittest fornisce una classe base,TestCase, che può essere utilizzato per creare nuovi casi di test.

  • test suite- Questa è una raccolta di casi di test, suite di test o entrambi. Viene utilizzato per aggregare i test che dovrebbero essere eseguiti insieme. Le suite di test sono implementate dalla classe TestSuite.

  • test runner- Questo è un componente che orchestra l'esecuzione dei test e fornisce il risultato all'utente. Il corridore può utilizzare un'interfaccia grafica, un'interfaccia testuale o restituire un valore speciale per indicare i risultati dell'esecuzione dei test.

Creazione di uno unit test

I seguenti passaggi sono coinvolti nella scrittura di un semplice test unitario:

Step 1 - Importa il modulo unittest nel tuo programma.

Step 2- Definisci una funzione da testare. Nell'esempio seguente, la funzione add () deve essere sottoposta a test.

Step 3 - Crea un testcase sottoclassando unittest.TestCase.

Step 4- Definisci un test come metodo all'interno della classe. Il nome del metodo deve iniziare con "test".

Step 5- Ogni test chiama la funzione di asserzione della classe TestCase. Esistono molti tipi di affermazioni. L'esempio seguente chiama la funzione assertEquals ().

Step 6 - La funzione assertEquals () confronta il risultato della funzione add () con l'argomento arg2 e lancia assertionError se il confronto fallisce.

Step 7 - Infine, chiama il metodo main () dal modulo unittest.

import unittest
def add(x,y):
   return x + y
   
class SimpleTest(unittest.TestCase):
   def testadd1(self):
      self.assertEquals(add(4,5),9)
      
if __name__ == '__main__':
   unittest.main()

Step 8 - Esegui lo script precedente dalla riga di comando.

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

Step 9 - I tre seguenti potrebbero essere i possibili risultati di un test -

Suor n Messaggio e descrizione
1

OK

Il test viene superato. "A" viene visualizzato sulla console.

2

FAIL

Il test non viene superato e genera un'eccezione AssertionError. "F" viene visualizzato sulla console.

3

ERROR

Il test solleva un'eccezione diversa da AssertionError. "E" viene visualizzato sulla console.

Questi risultati vengono visualizzati sulla console rispettivamente da ".", "F" ed "E".

Interfaccia della riga di comando

Il modulo unittest può essere utilizzato dalla riga di comando per eseguire test singoli o multipli.

python -m unittest test1
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method

unittest supporta le seguenti opzioni della riga di comando. Per un elenco di tutte le opzioni della riga di comando, utilizzare il seguente comando:

Python –m unittest -h

Suor n Opzione e descrizione
1

-h, --help

Mostra questo messaggio

2

v, --verbose

Output dettagliato

3

-q, --quiet

Produzione minima

4

-f, --failfast

Fermati al primo fallimento

5

-c, --catch

Cattura control-C e visualizza i risultati

6

-b, --buffer

Buffer stdout e stderr durante le esecuzioni di test