5.4.1 Scrivere Unit Tests per il package test

È preferibile che i test per il package test utilizzino il modulo unittest e seguano alcune linee guida. Per prima cosa tutti i nomi dei metodi di test devono iniziare con "test_" come anche il nome del modulo. Questo è necessario affinchè il test driver li riconosca come metodi di test. Inoltre, non dovrebbe essere inclusa alcuna stringa di documentazione. Al loro posto si dovrebbe utilizzare un commento (come "# Le funzioni di test restituiscono solo True o False") per fornire documentazione al metodo di test. Questo viene fatto perché le stringhe di documentazione (NdT: docstring) se esistono vengono stampate e perciò non risulta chiaro quale test sia in esecuzione.

Spesso viene utilizzata una costruzione basilare tipo questa:

import unittest
from test import test_support

class MyTestCase1(unittest.TestCase):

    # Usate solo setUp() e tearDown() se necessario
    
    def setUp(self):
        ... codice da utilizzare per preparare i test ...
	
    def tearDown(self):
        ... codice da eseguire per la ripulitura dopo i test ...

    def test_feature_one(self):
        # Test feature one.
	... codice di test ...

    def test_feature_two(self):
        # Test feature two.
        ... codice di test ...
         
    ... altri metodi di test ...
    
class MyTestCase2(unittest.TestCase):
    ... stessa struttura di MyTestCase1 ...
    
... altre classi di test

def test_main():
    test_support.run_unittest(MyTestCase1,
                              MyTestCase2,
                              ... elencate altri test ...
                             )

if __name__ == '__main__':
    test_main()

Questo codice permette alla suite di test di essere eseguita sia da test.regrtest sia autonomamente come script.

Lo scopo dei test di regressione è quello di provocare la ``rottura'' del codice, facendolo andare in errore. Per cui è necessario seguire alcune linee guida:

Vedete anche:

Test Driven Development
Un libro di Kent Beck riguardante la scrittura dei test prima del codice.

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