Il problema di eseguire unit testing quando è coinvolto un
database è piuttosto noto. Facendo alcune ricerche si trovano diversi approcci,
ma nessuna soluzione definitiva. Nel nostro scenario abbiamo individuato una
strategia interessante ed efficace (se abbiamo scoperto l'acqua calda e un
approccio del genere era già noto e diffuso, chiedo venia, ci è sfuggito ), che parte da questi presupposti:
- abbiamo un database di test dove, nella fase di sviluppo di una certa
logica, abbiamo dei dati validi disponibili
- abbiamo uno strato di accesso ai dati consistente, dove elementi di
"definizione" delle estrazioni dati e di generazione automatica di codice ci
danno la possibilità di disaccoppiarci dalla base dati reale, sia in termini
di struttura che di dbms scelto
In questo contesto, ed avendo a disposizione dei nostri "driver" specifici
del dbms scelto, abbiamo pensato di scriverne uno nuovo che "simulasse" il fatto
di farci parlare con un Sql Server ma che nella realtà ci restituisse delle
versioni "taroccate" degli oggetti SqlConnection, SqlCommand e SqlDataAdapter,
passando attraverso le interfacce IDbConnection e IDbCommand e IDataAdapter.
Questi componenti, in presenza di un database "reale", registrano ogni singolo
accesso ai dati su un file, scrivendo il nome dell'interrogazione (o un sql
parametrico), i parametri passati e un DataSet serializzato. Questo file resta
così disponibile una volta che i test sono stati eseguiti con successo, e a
partire da questo è facile, a fronte delle stesse interrogazioni, restituire i
dati corretti per il test senza riprenderli dal database. Quindi, quando il test
è pronto, potrà essere lanciato nei mesi a venire indipendentemente dal fatto
che quel database di test contenga ancora dati validi, o addirittura dal fatto
che esista ancora, il file di log sarà sufficiente per accendere le lucine verdi
di NUnit e testare le nostre logiche di business Al momento gestiamo solo letture di
dati, ma con poco sforzo, e quando ci servirà, potremo gestire le classiche
operazioni CRUD.
powered by IMHO 1.3
posted @ venerdì 8 settembre 2006 22:21