Guida completa a Python
📘 Capitolo 11 – Testing e Debug in Python
1. Perché testare il codice?
Testare serve a:
- Verificare che il tuo codice funzioni come previsto
- Trovare e correggere bug
- Evitare che nuove modifiche rompano codice già funzionante
2. Debug base: il buon vecchio print()
A volte il modo più semplice per capire cosa sta succedendo è stampare valori durante l’esecuzione:
def calcola_area(base, altezza):
print("Base:", base, "Altezza:", altezza)
return base * altezza
✔️ Funziona bene in fase iniziale
❌ Ma non è pratico per progetti grandi o professionali
3. Il modulo pdb
– Python Debugger
pdb
ti permette di mettere in pausa il programma e esaminarlo passo per passo
import pdb
a = 5
b = 0
pdb.set_trace() # ← Pausa qui
c = a / b # Divisione per zero
Durante il debug puoi scrivere comandi:
n
(next) – vai alla prossima rigac
(continue) – continua fino alla fineq
(quit) – escip
(print) – stampa variabile, es:p a
4. Scrivere test automatici: assert
def somma(a, b):
return a + b
# Test manuale
assert somma(2, 3) == 5
assert somma(-1, 1) == 0
Se la condizione è falsa, Python solleva un’eccezione AssertionError
5. Test unitari con unittest
import unittest
def moltiplica(a, b):
return a * b
class TestMoltiplica(unittest.TestCase):
def test_valori_positivi(self):
self.assertEqual(moltiplica(2, 3), 6)
def test_zero(self):
self.assertEqual(moltiplica(0, 5), 0)
def test_negativi(self):
self.assertEqual(moltiplica(-2, 4), -8)
# Fa partire i test
if __name__ == '__main__':
unittest.main()
Esegui questo file da terminale. Se tutto va bene:
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
6. Testing avanzato (extra, opzionale)
Puoi usare librerie come:
pytest
➝ test più semplici e potenticoverage
➝ per sapere quanto del tuo codice è testatomock
➝ per testare codice che usa API, database, ecc.
🧪 Esercizio pratico
Scrivi una funzione è_pari(n)
che ritorna True
se un numero è pari Scrivi una classe di test che verifichi diversi casi:
è_pari(2)
→True
è_pari(3)
→False
è_pari(0)
→True
1. Funzione è_pari(n)
def è_pari(n):
return n % 2 == 0
2. Classe di test con unittest
import unittest
# Funzione da testare
def è_pari(n):
return n % 2 == 0
# Classe di test
class TestPari(unittest.TestCase):
def test_pari(self):
self.assertTrue(è_pari(2))
self.assertTrue(è_pari(0))
self.assertTrue(è_pari(100))
def test_dispari(self):
self.assertFalse(è_pari(1))
self.assertFalse(è_pari(3))
self.assertFalse(è_pari(-5))
# Avvia i test se il file viene eseguito direttamente
if __name__ == '__main__':
unittest.main()
Cosa hai imparato
- Come testare una funzione automaticamente
- Come usare
assertTrue()
eassertFalse()
- Come creare una classe di test strutturata