Voglio scrivere una classe A
che ha un metodo calculate(<params>)
. Quel metodo dovrebbe calcolare un valore usando i dati del database. Così ho scritto una classe Test_A
per il test delle unità (TDD). L'accesso al database è fatto usando un'altra classe che ho deriso con una classe, chiamiamola Accessor_Mockup
.
Ora, il ciclo TDD mi richiede di aggiungere un test che non riesce e di apportare le modifiche più semplici a A
in modo che il test passi. Quindi aggiungo i dati a Accessor_Mockup
e chiamo A.calculate
con i parametri appropriati.
Ma perché A
dovrebbe usare la classe accessor? Sarebbe più semplice (!) se la classe semplicemente "conosce" i valori che potrebbe recuperare dal database. Per ogni test che scrivo potrei introdurre un nuovo valore (o un if-branch o qualsiasi altra cosa).
Ma aspetta ... TDD è di più. C'è la parte del refactoring. Potrei refactoring di classe A utilizzando l'accessor di database. Ma potrei rifattenerlo in qualsiasi altro modo (ad esempio introducendo nuove classi che incapsulano i dati). Quindi, ancora una volta: Come faccio a scrivere test che costringono A a usare il database (e nient'altro)?