×

Guida completa a Python

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 riga
  • c (continue) – continua fino alla fine
  • q (quit) – esci
  • p (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 potenti
  • coverage ➝ per sapere quanto del tuo codice è testato
  • mock ➝ 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() e assertFalse()
  • Come creare una classe di test strutturata

Pagine: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19