È 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:
class TestFuncAcceptsSequences(unittest.TestCase): func = mySuperWhammyFunction def test_func(self): self.func(self.arg) class AcceptLists(TestFuncAcceptsSequences): arg = [1,2,3] class AcceptStrings(TestFuncAcceptsSequences): arg = 'abc' class AcceptTuples(TestFuncAcceptsSequences): arg = (1,2,3)
Vedete anche:
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.