Domanda

Uso un generatore di codice (CodeSmith con modello .NetTiers) per generare tutto il codice DAL. Scrivo unit test per il mio codice (livello aziendale) e questi test stanno diventando piuttosto lenti da eseguire. Il problema è che per ogni test, ho resettato il database per avere uno stato pulito. Inoltre, poiché faccio molti test, sembra che la latenza delle operazioni del database si sommi a un bel ritardo.

Tutte le operazioni DB vengono eseguite attraverso una classe DataRepository generata da .NetTiers. Sai se esiste un modo per generare (o codificare me stesso) un mock-DataRepository che utilizzerebbe l'archiviazione in memoria invece di utilizzare il database?

In questo modo, sarei in grado di usare questo finto repository nei miei test di unità, accelerandoli molto, senza cambiare nulla al mio codice attuale!

È stato utile?

Soluzione

Dai un'occhiata a Dependency injection (DI) e Inversion of Control containers (IOC). In sostanza, creerai un'interfaccia che può essere implementata da un nuovo oggetto DB finto, quindi il framework DI inietterà il tuo DB finto durante l'esecuzione dei test e il DB reale durante l'esecuzione dell'app.

Esistono numerose librerie gratuite e open source che puoi utilizzare per aiutarti. Dato che sei in C #, una delle librerie DI nuove e emergenti è Ninject . Ce ne sono anche molti altri. Dai un'occhiata a questo l'articolo di Wikipedia per gli altri e una descrizione di alto livello.

Altri suggerimenti

Dalla descrizione del problema, penso che tu stia eseguendo il test di integrazione perché il tuo test utilizza il business, il DAL e il database live.

Per i test unitari, hai a che fare con un livello di codice con tutte le altre dipendenze derise o stub. Con questo approccio, i test unitari saranno davvero veloci da eseguire su ogni modifica incrementale del codice.

Esistono vari framework di derisione che puoi usare come Rhino Mock, Moq, typemock per citarne alcuni. (Nel mio progetto, uso Rhino mock per deridere il livello DAL e unit test Business Layer in Isolation)

Harsha

Alcuni dei nostri test unitari utilizzano dati recuperati da XML che sono stati generati da un database per deridere l'accesso db. Le classi DAL sono sostituite da classi finte perché sono tutte memorizzate in un contenitore DI.

La generazione dell'xml è un codice personalizzato, se trovi una soluzione open source per questo, sono felice di sentirlo.

Modifica dopo la risposta di Stefan: ricordo un altro team che utilizza SQL CE per il loro database di test

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top