🧪 8 Test di un programma
🎯 Obiettivi
- Comprendere l’importanza dei test nel ciclo di vita del software
- Distinguere tra test manuali e test automatici
- Saper scrivere unit test per funzioni e classi in Python
- Validare applicazioni con input previsti e imprevisti
📘 Contenuti del Modulo
🔹 1. Cos’è un test
- Un test è una verifica del comportamento del programma rispetto agli output attesi.
- Serve per garantire che funzioni, classi e moduli facciano ciò che devono.
- I test aiutano a:
- Scoprire bug
- Verificare modifiche (regressioni)
- Garantire la manutenibilità
🔹 2. Test manuale vs test automatico
| Tipo di test | Come si fa | Quando usarlo | Esempio |
|---|---|---|---|
| Test manuale | Inserimento diretto di input e osservazione dell’output | In fase iniziale o esplorativa | Avviare una funzione e vedere se stampa ciò che ci si aspetta |
| Test automatico | Codice che verifica altre funzioni | In sviluppo e debugging professionale | Uso del modulo unittest |
🔹 3. Scrivere test per funzioni e classi
Esempio – Funzione da testare:
def somma(a, b):
return a + b
✅ Test manuale:
print(somma(2, 3)) # Output atteso: 5
✅ Test automatico:
import unittest
class TestSomma(unittest.TestCase):
def test_somma_interi(self):
self.assertEqual(somma(2, 3), 5)
def test_somma_zero(self):
self.assertEqual(somma(0, 0), 0)
def test_somma_negativi(self):
self.assertEqual(somma(-1, -2), -3)
if __name__ == '__main__':
unittest.main()
🔹 4. Validazione del software
Cosa succede se l’input non è previsto?
💥 Codice con errore:
print(somma("a", 2)) # Errore: TypeError
🎯 Possiamo gestire l’errore oppure testarlo:
def somma(a, b):
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Devono essere numeri")
return a + b
✅ E relativo test:
def test_tipo_errato(self):
with self.assertRaises(TypeError):
somma("a", 2)
🛠️ Attività Pratiche
✍️ 1. Scrivi casi di test per funzioni esistenti
Funzione di esempio:
def dividi(a, b):
return a / b
Scrivi 3 test:
- Divisione normale
- Divisione con
b = 1 - Divisione per 0 (gestire con
try/excepto testare conassertRaises)
🧰 2. Introdurre il modulo unittest
Crea un file test_calcoli.py e importa:
import unittest
from calcoli import somma, dividi
Usa setUp() per inizializzare valori, tearDown() per pulire.
🚀 3. Progetto finale – Mini App e test
👩💻 App: un calcolatore che fa somma, sottrazione, moltiplicazione, divisione.
📦 Struttura:
progetto_calcolatrice/
│
├── calcolatrice.py # Funzioni
├── app.py # Interfaccia utente
└── test_calcolatrice.py # Test con unittest
👨🔬 Esempi di test da includere:
test_somma_positivitest_divisione_zerotest_input_stringa(che solleva errore)
🧠 Test di valutazione – 6 domande
1. Perché servono i test nei programmi?
A) Per scrivere meno codice
B) Per controllare che il programma funzioni
C) Per evitare i commenti
2. Cosa fa assertEqual() in unittest?
A) Confronta due numeri
B) Controlla che due valori siano uguali
C) Aggiunge due numeri
3. Come si scrive un test per un errore previsto?
A) assertErrore()
B) assertRaises()
C) tryAssert()
4. Qual è la differenza tra test manuale e test automatico?
A) Il manuale si scrive da soli, l’automatico no
B) Il manuale si osserva, l’automatico è codice
C) Nessuna
5. Dove si scrivono i test automatici?
A) In fogli di calcolo
B) In file .txt
C) In file .py con unittest
6. Il test self.assertEqual(somma(2, 2), 5) è…
A) Corretto
B) Fallito
C) Sintattico
Risposte
B B B B C B



.jpeg)
