Vai al contenuto principale

Test-Driven Development in Python: guida per principianti

Scopri il test-driven development (TDD) con il nostro tutorial completo su Python. Impara a scrivere test robusti prima del codice con esempi pratici.
Aggiornato 29 set 2026  · 7 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Il testing ti dà la sicurezza che il tuo codice faccia quello che ti aspetti. In questo tutorial impareremo le basi del test-driven development (TTD) con Python. Per iniziare, vedremo un po' di contesto sul test-driven development: cos'è e perché scrivere prima i test è utile quando si scrive codice. Adotteremo un approccio test-first, in cui scriveremo prima casi di test fallimentari per la funzionalità che vogliamo implementare, prima di scrivere le funzioni vere e proprie.

Prerequisiti del tutorial

Per questo tutorial ti servirà una conoscenza di base di Python; se vuoi ripassare, puoi consultare questo corso: Introduction to Python for Developers.

Un approccio test-first ci permette di ragionare sul comportamento desiderato e sugli output attesi. In Python puoi usare varie librerie per i test, come pytest e unnitest. Tuttavia, per ora ci concentreremo su come scrivere semplici casi di test usando il Python nativo per verificare che la funzionalità desiderata produca l'output atteso.

Partiremo da un caso di test semplice ed espanderemo progressivamente i casi per coprire diversi scenari. Man mano che ampliamo i test, potremmo trovare bug o lacune nella logica iniziale dell'implementazione che dovremo migliorare. Questo processo complessivo di scrivere iterativamente casi di test più avanzati, vederli fallire e poi tornare a migliorare l'implementazione è al cuore del test-driven development con Python.

Per questo tutorial useremo DataLab, il notebook dati cloud-based di DataCamp che ti consente di scrivere ed eseguire codice Python senza installare nulla in locale. Iniziamo!

Primi passi con DataLab

Prima di iniziare con il test-driven development, dobbiamo esplorare DataLab e capire come usarlo per supportare il nostro percorso di apprendimento. Se apri DataLab, noterai di avere molte opzioni. Per ora ci concentreremo sulla scrittura di Python in DataLab.

image5.png

Se selezioni Python, il workbook aprirà una cella di codice in cui scrivere Python. Apparirà più o meno così:

image4.png

Qui hai a disposizione alcune opzioni utili. Ad esempio, puoi eseguire la cella per produrre output, aggiungere commenti o note per supportare l'apprendimento e usare l'AI per iniziare o sbloccare eventuali ostacoli. Puoi anche aggiungere o eliminare tutte le celle di cui hai bisogno. Noi ci concentreremo sull'esecuzione della cella con l'opzione "Run". Come vedi nel codice qui sotto, qualsiasi output prodotto dal tuo codice viene registrato sotto quando esegui la cella.

Nota veloce: se hai usato più celle e hai definito una variabile in una cella ma stai cercando di accedervi da un'altra, devi eseguire ogni cella separatamente oppure l'intero workbook (dal pulsante "Run" in alto a destra del tuo workbook).

image7.png

Ora che abbiamo visto le basi di DataLab, iniziamo con il test-driven development.

Test Driven Development

Il test-driven development significa scrivere i test del tuo codice prima di scrivere il codice stesso. Per spiegare il TTD, partiamo da un esempio molto semplice: scrivere uno script Python che somma numeri. Tuttavia, prima di scrivere la funzione, scriveremo un test per verificare che 1 + 1 faccia 2. Puoi farlo con il Python nativo, come mostrato di seguito.

assert 1 + 1 == 2

La keyword assert in Python si usa per scrivere casi di test e confermare che le condizioni del programma risultino True. Ti permette di validare il comportamento e gli output del tuo codice. Quando un'istruzione assert fallisce, viene sollevata un'AssertionError, che segnala un problema nel codice. Nel tuo workbook DataLab apparirebbe così:

image1.png

Esempio 1: testare una funzione semplice

Partiamo dalla funzione di test. Per iniziare, apri un file Python in DataLab. Il test-driven development prevede di scrivere prima un test che fallisce. Quindi, scriviamo un test fallimentare chiamando la funzione add(), che non è ancora stata definita.

assert add(1, 1) == 2

Questo produrrà un NameError, che indica che non esiste un'implementazione, noto come passaggio "rosso". Ottieni un NameError quando provi a chiamare una funzione o variabile che non è stata definita.

image3.png

Ora è il momento di implementare la funzione. Possiamo farlo definendo la funzione:

def add(num1, num2):
    return

Abbiamo definito la nostra funzione add, che accetta due parametri, num1 e num2. La nostra funzione per ora non restituisce nulla. Vediamo se l'implementazione della nostra funzione supera i test!

image6.png

Non vediamo più un NameError. Tuttavia, eseguire la cella produce ancora un errore! Questa volta è un'AssertionError. Quindi il nostro test fallisce ancora! Perché potremmo ottenere questo errore? Perché abbiamo definito una funzione che per ora non restituisce nulla.

Quando eseguiamo il test, otteniamo un'AssertionError perché 1 + 1 non è uguale a 2 con la nostra implementazione vuota. Infine, possiamo farlo passare implementando correttamente la logica nella funzione.

image9.png

Noterai il pallino verde nell'angolo della cella. Indica che il tuo codice è valido ed è passato quando esegui la cella. In precedenza era rosso con un errore di esecuzione e mostrava il tipo di errore sotto la cella. Questa funzione è utile per il debug del tuo codice in DataLab.

Hai appena scritto il tuo primo test in Python usando il test-driven development. Ottimo lavoro! Ora passeremo ad ampliare i nostri test e a ragionare su come intercettare potenziali errori che farebbero fallire la nostra funzione o non produrrebbero l'output atteso.

Esempio 2: più casi di test

Testare con un solo valore di input spesso non basta a scoprire potenziali errori. I bug possono nascondersi facilmente, soprattutto se la tua funzione dipende da input variabili dell'utente o da logiche esterne. Quindi, come possiamo testare a fondo una funzione contro più valori?

Per esempio, cosa succede se viene passato un tipo di dato sbagliato alla funzione? Potresti usare framework di testing Python, ma utilizziamo invece il Python di base. Per prima cosa, definirò un elenco di dizionari di input per simulare diversi scenari d'uso:

test_cases = [
    {"num1": 1, "num2": 3, "expected": 4},
    {"num1": 1, "num2": "invalid", "expected": "Error: num2 must be a number"}, 
    {"num1": [1,2,3], "num2": 2, "expected": "Error: num1 must be a number"},
    {"num1": -1, "num2": 1, "expected": 0},
    {"num1": 3.5, "num2": 2.5, "expected": 6.0}, 
    {"num1": 100, "num2": 200, "expected": 300}
]

Il codice sopra mostra gli input per la funzione insieme agli output attesi. Tuttavia, dobbiamo aggiornare il nostro test per iterare su questi casi. Possiamo validare ciascun dizionario nella lista annidando l'assert all'interno di un for loop.

for test in test_cases:
    assert add(test["num1"], test["num2"]) == test["expected"]

Dato che la funzione non è cambiata, ci aspettiamo che questo test passi o fallisca? E che errore potrebbe verificarsi?

image8.png

Il test genera un TypeError perché non abbiamo gestito gli input non numerici; cosa succede se viene passato un valore string o boolean invece di un int? Possiamo aggiornare la funzione per intercettare questi casi! Possiamo restituire un messaggio personalizzato per tipi non validi verificando che la variabile di input sia un intero o un float.

def add(num1, num2):
    if type(num1) is not int and type(num1) is not float:
        return "Error: num1 must be a number"
    elif type(num2) is not int and type(num2) is not float:
        return "Error: num2 must be a number"
    else:
        return num1 + num2

Quando rieseguiamo i test, non otteniamo più errori, quindi i nostri test sono passati. Ora possiamo vedere il cerchio verde, che indica che abbiamo implementato test passanti. Ben fatto!

image2.png

Considerazioni finali

In questo tutorial abbiamo visto i fondamenti del test-driven development in Python usando DataLab. DataLab offre un IDE cloud che ti permette di scrivere ed eseguire codice Python senza installazioni locali. I test validano il comportamento del codice e intercettano gli errori in anticipo. Le istruzioni assert verificano condizioni e sollevano eccezioni in caso di fallimento.

Puoi esplorare altri casi di test e iniziare a scrivere i tuoi test in DataLab! Se vuoi saperne di più sul testing in Python, dai un'occhiata al nostro corso DataCamp - Introduction to Testing in Python.


Amina Edmunds's photo
Author
Amina Edmunds
LinkedIn

Amina è una stagista nello sviluppo di contenuti presso Datacamp. Con un background in Architettura e Istruzione, ha cambiato carriera per dedicarsi allo sviluppo software, iniziando con JavaScript; ora è focalizzata su Python.

Argomenti
Python

Inizia oggi il tuo percorso nel testing!

{count, plural, one {Corso} other {Corsi}}

Introduzione al Testing in Python

{hours} ore
26.7K
Diventa un esperto dei test Python: Impara i metodi, crea controlli e assicurati che il codice sia privo di errori con pytest e unittest.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

{count, plural, one {blog} other {blogs}}

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

{count, plural, one {blog} other {blogs}}

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

{count, plural, one {blog} other {blogs}}

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro