Unit test codice DAO che utilizza SQLite quando il database dell'applicazione è Oracle

1

Abbiamo un'applicazione con il backend Oracle. Il livello DAO è scritto in C # e utilizza nHibernet per eseguire le operazioni sui dati.

Per unità testare il nostro codice DAO, usiamo SQL Lite che crea il database basato sulla nostra mappatura esistente nel progetto.

Alcune delle nostre query di ibernazione che vanno a oracle usano (+) per i join esterni. Ora SQL Lite non capisce (+).

Ci può essere un po 'più di sintassi da Oracle che SQL Lite non capisce. Come possiamo risolvere problemi come questi?

Quali sono gli altri sistemi di database che possono essere utilizzati per l'unità test del codice dell'applicazione.

    
posta dineshsbisht 11.12.2013 - 22:53
fonte

2 risposte

2

Il test su un DB diverso da quello che userai nella produzione non ti darà alcun vantaggio. Qual e il punto? Alcuni dei tuoi test potrebbero passare a SQL Lite ma fallire quando si è connessi a Oracle. Peggio che inutile.

Quindi hai due scelte:

  1. Prendi in giro il tuo livello DAO, in modo che il tuo codice non parli effettivamente con un DB, e in questo modo li effettui test di unità "reali". Ora stai testando il tuo codice c # e non il DB né il nhibernate.

  2. Collegarsi a un altro DB Oracle (ad esempio, un DB UnitTesting con dati fittizi in esso) e testarlo, che sarebbe la mia scelta preferita. I nazisti del TDD ti urleranno "non è un PROVA UNITÀ REALE" a cui risponderò "Non mi interessa come si chiama, sta testando il mio codice che è ciò di cui ho bisogno".

risposta data 12.12.2013 - 02:40
fonte
0

Non considererei la necessità di un database come parte del test per essere un test unitario. È più simile al test di integrazione. Un test unitario non dovrebbe richiedere qualcosa di estraneo al metodo da testare, specialmente un database. Il tuo test unitario dovrebbe verificare che venga generato lo sql corretto, non che il database stia facendo la cosa giusta.

    
risposta data 11.12.2013 - 23:18
fonte

Leggi altre domande sui tag