Ciao, e benvenuto nella seconda puntata della sessantanovesima stagione. Nella scorsa puntata abbiamo detto che un test è un esperimento. Bello come principio, ma un esperimento, in pratica, com'è fatto dentro? Oggi apriamo un test e guardiamo la sua anatomia. Perché sotto la varietà infinita di test che vedrai in giro, c'è sempre la stessa, semplicissima struttura in tre tempi. Una volta che la vedi, non la puoi più non vedere.
Partiamo dai tre tempi, che hanno anche dei nomi. Il primo tempo è: prepara. Metti in piedi la situazione di partenza, le condizioni dell'esperimento. Crei gli oggetti, imposti i valori, prepari tutto quello che serve perché la scena sia pronta. Il secondo tempo è: agisci. Compi l'azione che vuoi mettere alla prova, di solito una sola: chiami la funzione, esegui il metodo, mandi la richiesta. Il terzo tempo è: verifica. Guardi il risultato e controlli che sia quello che ti aspettavi. Prepara, agisci, verifica. Ogni test ben scritto, dal più piccolo al più complesso, segue questa danza in tre passi. Cambiano le parole a seconda del linguaggio e degli strumenti, ma lo scheletro è sempre quello.
Vediamo perché questa struttura non è una convenzione a caso, ma il calco esatto di un esperimento controllato. Prepara è allestire il laboratorio: metti le condizioni note, così che l'unica cosa incerta sia ciò che stai studiando. Agisci è far scattare l'evento, la variabile che vuoi osservare. Verifica è la misura, la lettura dello strumento. Uno scienziato serio non tocca dieci cose insieme e poi guarda cosa succede: cambia una variabile alla volta, tenendo ferme tutte le altre. Un buon test fa lo stesso. Fa una cosa, e ne osserva un effetto. Se ne fai troppe, e poi qualcosa va storto, non saprai mai quale delle tue mosse sia la colpevole.
E qui arriva il cuore di tutto, il terzo tempo, quello che rende un test un test: l'asserzione, la verifica. È il momento in cui dici, nero su bianco, cosa deve essere vero perché l'esperimento sia riuscito. Il risultato deve essere quattro. La lista deve avere tre elementi. Questa chiamata deve sollevare un errore. Senza questa affermazione esplicita, non hai un test: hai solo del codice che gira. Puoi eseguire una funzione mille volte, ma se non controlli mai il risultato, non stai testando niente. Stai solo guardando il codice muoversi. L'asserzione è l'occhio dell'esperimento: è lì che l'osservazione diventa un giudizio, riuscito o fallito. Ed è anche la parte più difficile da scrivere bene, perché ti costringe a dire con esattezza cosa ti aspetti, e a volte scopri che non lo sapevi davvero.
Nota una cosa importante su cosa succede quando l'esperimento fallisce. Un test rosso, uno che non passa, non è una brutta notizia: è la notizia più utile che potrai ricevere. Perché ti dice, con precisione, che una tua ipotesi era sbagliata. E se il test è fatto bene, se prepara poco, agisce una volta sola e verifica una cosa precisa, allora quel fallimento ti indica quasi col dito dov'è il problema. Ripensa alla scorsa stagione, al modello di stato e passo per fare debug. Un buon test è quel modello reso automatico: restringe il campo, ti mette davanti la fotografia esatta in cui qualcosa non torna, così tu non devi cercare a tentoni in tutto il programma. Il test ha già fatto per te la parte più noiosa del debug: circoscrivere il sospetto.
C'è un principio che tiene insieme tutto questo, ed è la ragione per cui i test piccoli battono i test grandi. Più cose metti dentro un singolo test, meno ti dice quando fallisce. Un test enorme che prepara mezzo sistema, compie otto azioni e poi controlla il risultato finale è come un esperimento in cui hai acceso e spento venti interruttori: se qualcosa esplode, buona fortuna a capire quale. Un test minuscolo, invece, è un esperimento pulito. Quando diventa rosso, il colpevole è quasi sempre uno solo, e lo hai già tra le mani. La precisione della diagnosi dipende dalla piccolezza dell'esperimento.
Voglio lasciarti con l'immagine che mi guida quando scrivo un test. Immagina di descrivere il tuo esperimento a un collega, in tre frasi soltanto. Date queste condizioni. Quando faccio questa cosa. Allora mi aspetto questo. Se non riesci a raccontare il tuo test in queste tre frasi pulite, probabilmente sta facendo troppo, e quando si romperà ti lascerà nel dubbio invece che nella chiarezza. Un buon test si legge come una piccola storia con un inizio, un'azione e una conclusione verificabile. Non è codice buttato lì per dovere: è un esperimento raccontato con cura.
Per oggi ci fermiamo qui. Abbiamo aperto un test e trovato la sua anatomia, sempre la stessa in tre tempi: prepara le condizioni, agisci una volta sola, verifica un risultato preciso. È il calco di un esperimento controllato, dove cambi una variabile alla volta per sapere sempre chi è il colpevole. Il cuore è l'asserzione, il terzo tempo: senza un'affermazione esplicita su cosa deve essere vero non stai testando, stai solo guardando il codice muoversi. E un test rosso è la notizia più utile che ci sia, tanto più preciso quanto più piccolo è l'esperimento. Nella prossima puntata: la piramide dei test. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.