In questi giorni sto avendo modo di riflettere sulle differenze tra testing utilizzando i mock e testing utilizzando le risorse “reali”.
In particolare sto ragionando sul problema stranoto di testare classi che interagiscono con risorse come database o librerie esterne.

Dopo una serie di esperienze sono arrivato a pensare che non è ragionevole non avere neanche un test che accede realmente alle risorse: scrivere il codice in TDD sfruttando i mock mi può permettere di avere un buon design ma questo non mi ha finora garantito che la richiesta dell’utente fosse esaudita. Ed è questo per cui in fin dei conti scriviamo codice… no?

Da un diverso punto di vista questi ragionamenti mi hanno portato a considerare su un fatto abbastanza noto della vita: la differenza tra l’etichetta che descrive un oggetto e l’oggetto stesso.
L’etichetta mi può sicuramente dare delle informazioni utili sull’oggetto ma l’unico vero modo per per conoscere quell’oggetto è sperimentarlo direttamente. Classici esempi di questo concetto sono l’etichetta sulla bottiglia del vino e il vino e la mappa di una località e la località stessa.

Nessuno può dire che le etichette, o le mappe, non servano, come non dico che i mock non servano (e infatti li uso) ma se posso preferisco sicuramente assaggiare il vino o fare un bel viaggio!

Tutto ciò comunque non dice nulla sulla correttezza dei miei ragionamenti sul testing: se qualcuno mi dimostra che il modo in cui testo non è corretto sarò ben felice di modificare i miei test😀