Domanda

Sto cercando soddisfacente opzioni per unità di test del mio .NET DAL classi;dato che non sono DAL, classi, possono accedere al database utilizzando direttamente ADO.NET.Attualmente io uso un'istanza di una base di dati di MSSQL per il test, ma chiedevo cosa più veloce, non ci sono---dal momento che l'unità di test è necessario eseguire il più rapidamente possibile, in memoria soluzione sarebbe l'ideale.

Vorrei anche ricordare che ho legato a me stesso di TSQL in quanto sto solo andando mai essere utilizzando una piattaforma di Microsoft.

È stato utile?

Soluzione

Dato che è stato:

Vorrei anche ricordare che ho legato io TSQL dato che ho sempre e solo utilizzare un Microsoft piattaforma.

Quindi Utilizzando Sql server compact Edition può funzionare bene per le tue esigenze.Non funziona interamente in memoria, ma in grado di operare in modalità di sola lettura (senza nessuna modifica si verificano i principali file di database in modo da può essere utilizzato da più di un test in una sola volta)

Ci sono un paio di trucchi, non le stored procedure sono supportate, un paio di tipi di dati devono essere tradotte e alcuni tipi di dati sono stretti limiti (in particolare di tipo varchar che può andare solo a 4000 caratteri) Linq to Sql, inoltre, non è supportato correttamente.

Comunque ho usato un Sql server Compact Edition come quasi interamente goccia di ricambio per il corretto di database di Sql Server con buoni risultati.

Altri suggerimenti

Ho trovato SQLite per essere l'opzione migliore.Però, sto utilizzando nHibernate, ma è zero config così ci vuole solo un secondo per impostare.Però, bisogna essere consapevoli del fatto che questi tipi di motori in genere la mancanza di un paio di cose che si potrebbe aver bisogno (per esempio, SQLite colpi fino a quando si dispone di spazi nei nomi di tabella, se si utilizza un provider ADO)

Concesso, @TopBanana è proprio su alcuni problemi con il non utilizzo di un "effettivo" del database.Tuttavia, in memoria un RDBMS è perfetto per quei tipi di test che si desidera eseguire molto velocemente (ad es.il check-in test incrementale o CI costruisce).

L'altro enorme vantaggio è che non devi preoccuparti di installazione o abbattere.È incredibilmente improduttivo per avere il vostro check-in e falliscono, perché sviluppatore ha rotto il tuo dev database ;-)

Mi consiglia di utilizzare lo stesso database per la vostra unità di test per la produzione.Davvero non c'è bisogno di qualche strano differenza di tiro in piedi quando si esegue il debug di un problema di vivere.

Se si dispone di uno sguardo a la grande unità di suite di test per NHibernate, vedrai che utilizza SQL Server (basato su disco), e il test eseguito in tempi sorprendentemente rapidi.È ancora più impressionante considerare che c'è molto di più tabella per la creazione / cancellazione in corso di media serie di test di unità, che non è quello che SQL Server è ottimizzato per.

Ho sentito che c'è un software per montare il ramdisk in windows (non ricordo l'url, mi dispiace).

Potrebbe essere interessante creare un test database.

È SQL Server davvero il collo di bottiglia per le unità di test?

Voglio dire:

  1. Hai profilato gli unit test (con qualcosa di simile a SQL Profiler).Sono tutti lenti?Sono un paio di lenti?Perché?
  2. Sono gli unit test fa troppo?È il setup e teardown codice troppo pesante?
  3. Se SQL è il tuo collo di bottiglia, hai preso in considerazione un beffardo quadro, così si beffe di tutte le chiamate SQL.

Ho avuto problemi simili con Oracle e abbiamo fatto la seguente:

  • fatto in modo che abbiamo avuto e che reale unit test non toccare il db, ma ha usato le simulazioni per i servizi invece

  • Tagged DB di test che in realtà bisogno di Oracle contro i test che potrebbe correre contro HSQLDB o H2 o qualsiasi altro database in memoria.Così siamo in grado di eseguire separatamente.

  • Con le prove che effettivamente utilizzate, le caratteristiche di Oracle abbiamo utilizzato una normale istanza di Oracle, che girava su una RAM.

Questo fatto le prove considerevoli più veloce.

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