5.3 unittest -- Ambiente per il test delle unità di codice (unittest)

Nuovo nella versione 2.1.

L'ambiente per il test delle unità di codice di Python, spesso indicato come ``PyUnit'', è una derivazione di Junit per il linguaggio Python, ideata da Kent Beck ed Eric Gamma. A sua volta, JUnit è una versione di Java dell'ambiente di Kent Smalltalk. Ognuna rappresenta di fatto lo standard per il test delle unità di codice per il relativo linguaggio.

PyUnit supporta l'automazione dei test, la condivisione del setup e dello shutdown del codice per i test, l'aggregazione dei test in raccolte e l'indipendenza dei test dall'ambiente relativo. Il modulo unittest fornisce classi che rendono facile il supporto di queste caratteristiche per un insieme di test.

Per ottenere ciò, PyUnit supporta alcuni concetti importanti:

test fixture
Il test fixture (NdT: impianto di test) rappresenta la preparazione necessaria per effettuare uno o più test ed ogni azione di cleanup relativa. Ciò può comportare, per esempio, la creazione di database proxy o temporanei, di directory oppure l'avvio di processi server.

test case
Il test case è l'unità più piccola di codice da testare. Controlla una specifica risposta ad un insieme di input. PyUnit fornisce una classe di base, TestCase, che può essere utilizzata per creare dei nuovi test di unità di codice.

test suite
Una test suite è una raccolta di test cases, test suites, o entrambi. Viene usata per aggregare test che devono essere eseguiti assieme.

test runner
Un test runner (NdT: ``esecutore del test'') è un componente che dirige l'esecuzione dei vari test e fornisce l'esito all'utente. Il runner può far uso di un'interfaccia grafica, testuale, oppure restituire un valore particolare per indicare i risultati dell'esecuzione dei test.

I concetti di test case e fixture vengono supportati tramite le classi TestCase e FunctionTestCase; la prima dovrebbe essere usata quando si creano nuovi test mentre la seconda può essere utilizzata quando si integra codice di test esistente con un ambiente guidato da PyUnit. Quando si creano fixture di test usando TestCase, i metodi setUp() e tearDown() possono essere ridefiniti al fine di fornire l'inizializzazione e la terminazione della fixture. Con la classe FunctionTestCase, possono essere passate al costruttore, per questi scopi, delle funzioni esistenti. Quando si avvia il test, l'inizializzazione della fixture del test viene eseguita per prima; in caso di successo, il metodo di pulitura viene avviato dopo l'esecuzione del test, senza riguardo al suo esito. Ogni istanza di TestCase verrà usata solo per avviare un singolo metodo del test, perciò una nuova fixture verrà creata per ogni singolo test.

Le test suite vengono implementate dalla classe TestSuite. Tale classe consente l'aggregazione di test individuali e test suite; quando la suite viene eseguita, tutti i test vengono aggiunti direttamente alla suite ed le sue suite ``figlie'' vengono eseguite.

Un test runner è un oggetto che fornisce un singolo metodo, run(), il quale accetta come parametro un oggetto TestCase o TestSuite, e restituisce un oggetto per il risultato. La classe TestResult è stata adibita a questo scopo PyUnit fornisce la classe TextTestRunner come test runner di esempio il quale segnala in modo predefinito i risultati del test sullo standard error. Runner alternativi possono essere implementati per altri ambienti (come quelli grafici) senza alcun bisogno di derivarli da una classe specifica.

Vedete anche:

Modulo doctest:
Un altro modulo per il supporto dei test che permette di farne uso in modo differente.
Sito web di PyUnit
La sorgente per ulteriori informazioni su PyUnit.
Simple Smalltalk Testing: With Patterns
Lo scritto originale di Kent Beck sulle strutture per i test, che usano i modelli condivisi da unittest.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.