Domanda

Ho sentito dire che quando lo sviluppo di applicazioni che utilizza un database che si dovrebbe fare unit testing del database. Quali sono le migliori pratiche nel test di unità base di dati? Quali sono le principali preoccupazioni quando si fanno test di unità db e come farlo "giusto"?

È stato utile?

Soluzione

  

Quali sono le migliori pratiche nel test di unità base di dati?

Il DBUnit quadro (un framework di test che permette di mettere un database in uno stato conoscere e di eseguire affermazione contro il suo contenuto) ha un database pagina di elenco testare migliori pratiche che, per la mia esperienza, sono vere.

  

Quali sono le principali preoccupazioni quando si fa il test delle unità db

  • Creazione di un fino a schema di data, la gestione dello schema cambia
  • Configurazione dei dati (dati di riferimento, dati di test) e mantenendo i dati di test
  • Keeping test indipendenti
  • permettendo agli sviluppatori di lavorare simultaneamente
  • Velocità (test che coinvolgono dati sono in genere più lenti e renderà la vostra intera costruzione richiedere più tempo)
  

e come farlo "giusto"?

Come accennato, seguire note le buone pratiche e utilizzare dedicati strumenti / quadri:

  • Prefer in-memory database, se possibile (per la velocità)
  • Utilizzare uno schema per sviluppatore è un must (per consentire il lavoro simultaneo)
  • Utilizzare uno strumento di "database di migrazione" (à la RoR) per gestire le modifiche allo schema e aggiornare uno schema per l'ultima versione
  • Costruire o utilizzare un test harness che permette di mettere il database in uno stato conosciuto prima di ogni prova e per eseguire afferma contro i dati dopo l'esecuzione (o per eseguire i test all'interno di una transazione che si rollback alla fine del test).

Altri suggerimenti

Un elenco di elementi che dovrebbero essere esaminato e considerato quando fissando con unit testing del database

  • Ogni tester ha bisogno di un database separato, al fine di evitare di interferire con le attività di altri tester / sviluppatore
  • Per avere un modo semplice di creare una banca dati da testare (questo è legato ad avere un database SQL Server sotto controllo di versione). Questo è particolarmente utile quando si cerca di trovare ciò che è andato storto se alcuni test falliscono
  • Focus su aree specifiche e test creando un singolo modulo invece di coprire tutto in una volta. Aggiunta test granularly è un buon modo per essere efficace
  • Assicurati di fornire il maggior numero di dettagli possibile quando un test fallisce, per consentire una più facile il debug
  • Utilizzare uno e gli stessi dati di test per tutti i test

Se il test vengono implementati utilizzando il framework tSQLt, il processo di test di unità potrebbe essere complicata quando si tratta di un sacco di basi di dati provenienti da più istanze di SQL Server. Al fine di mantenere, eseguire e gestire i test di unità direttamente da SQL Server Management Studio, ApexSQL Unit Test lattina essere utilizzato come soluzione

Date un'occhiata al questo link . Si va oltre alcuni dei principi fondamentali per la creazione di unità di test stored procedure in SQL Server, nonché i diversi tipi di test di unità e quando si dovrebbe usarli. Io non sono sicuro di quello che si sta utilizzando DBMS ma ovviamente questo articolo è orientata verso SQL Server.

Stolen dall'articolo:

  

Test Feature

     

Il primo e probabilmente più diffuso   classe di unit test del database è un   test di funzionalità. Nella mia mente, caratteristica   test testare le caratteristiche-o Core API,   se si vuole, del database dalla   prospettiva banca dati del consumatore.   Test programmabilità di un database   oggetti è lo scenario mainline qui.   Così, testando tutte le stored procedure,   funzioni e trigger all'interno della vostra   banca dati costituiscono prove di funzionalità in   la mia mente. Per provare una stored procedure,   si dovrebbe eseguire la stored procedure   e verificare che sia l'atteso   i risultati sono stati restituiti o   Si è verificato un comportamento appropriato.   Tuttavia, è possibile testare più di una semplice   questi tipi di oggetti. Puoi   immaginare che vogliono assicurare che una vista,   per esempio, restituire l'appropriato   calcolo da una colonna calcolata. Come   si può vedere, le possibilità in questo   reame sono grandi.

     

Schema Test

     

Uno degli aspetti più critici di un   banca dati è il suo schema, e test di   garantire è che si comporta come previsto   un'altra classe importante di banca dati   unit test. Qui, spesso si vuole   al fine di garantire che la vista restituisce il   attesi set di colonne dello   appropriato tipo di dati nella   ordine appropriato. Potresti volere   assicurarsi che il database fa, in   infatti, contengono le tabelle che 1.000   che ci si aspetta.

     

Sicurezza Test

     

Nel giorno di oggi e di età, la sicurezza   dei dati memorizzati all'interno   base di dati è fondamentale. Così, un altro   importante classe di unit test del database   sono quelli che prova il database   sicurezza. Qui, si vuole   assicurano che particolari utenti esistono in   il database e che siano   assegnate le autorizzazioni appropriate.   Spesso Si vuole creare negativo   test che tentano di recuperare i dati   da tabelle o viste con restrizioni e   assicurare che l'accesso sia   opportunamente negato.

     

Immagine-Data Test

     

Molti database contengono dati di stock, o   i dati di semi. Questi dati cambiano   di rado ed è spesso usato come   occhiata dati per applicazioni o fine   utenti. ZIP codici e la loro associati   le città e gli stati sono ottimi esempi   di questo tipo di dati. Pertanto, è   utile per creare test affinché   il tuo magazzino di dati fa, infatti, esiste   nel database.

Sono contento che hai chiesto di test di unità, e non prova in generale.

Database hanno molte caratteristiche che hanno bisogno di essere testati. Alcuni esempi:

  • Tipi di dati / formato / set di caratteri (provate l'inserimento di un nome svedese, o gli URL lunghi o numeri provenienti dal mondo reale, e vedere se le definizioni delle colonne sono ok)
  • Trigger
  • Vincoli (chiavi esterne, l'unicità ...)
  • Vista (verificare che i dati vengono correttamente inclusi / esclusi / trasformata)
  • stored procedure
  • UDF
  • Permessi
  • ...

Questo è utile non solo quando si cambia qualcosa nel database, ma anche quando si aggiorna il DBMS, o il cambiamento qualcosa nelle impostazioni.

In generale, l'integrazione test è fatto. Ciò significa che si crea una suite di test in un linguaggio di programmazione come PHP o Java, e le prove rilasciano alcune query. Ma se qualcosa non riesce, o ci sono alcune eccezioni, è più difficile capire il problema, per 2 motivi:

  • Il problema potrebbe essere nel codice PHP, o in configurazione di PHP, o in rete, o ...
  • Le istruzioni SQL sono più difficili da leggere e modificare, se sono inseriti in un altro linguaggio di programmazione.

Quindi, a mio parere, per database complessi è necessario utilizzare un quadro Unit Testing che è scritto in SQL (utilizzando stored procedure e tabelle). Devi scegliere con attenzione, perché questo tipo di strumenti, non è ampiamente utilizzato (e quindi non ampiamente testato). Ad esempio, se si utilizza MySQL So che questi strumenti:

Io uso unit test / NUnit / etc e il codice del database JUnit con Java o C #. Questi possono poi essere eseguito su un server di integrazione magari utilizzando uno schema separato per il database di test.

L'ultima Oracle SQL Developer è dotato di una costruito nel quadro unit testing. Ho dato un'occhiata a questo, ma sarebbe non usarlo. Esso utilizza un'interfaccia grafica per creare ed eseguire test e memorizza tutti i test nel database in modo non così facile da mettere casi di test sotto il controllo di versione. Ci sono probabilmente altri framework di test là fuori immagino che potrebbe essere specifico per il database.

Le buone pratiche sono simili a test di unità regolari:

  • mettere i test sotto il controllo di origine
  • test make che corrono veloci - non lo fanno di prova troppo in una volta
  • fare le vostre prove riproducibili

Date un'occhiata sul quadro DBTestDriven. E le grandi opere per noi. Scaricalo da GitHub o il loro sito web.

Per quanto riguarda lo sviluppo JVM, unit test possono beneficiare di JDBC astrazione:. Non appena si sa quali dati JDBC sono sollevate da un accesso DB, questi dati possono essere JDBC 'riprodotto'

Così caso l'accesso DB può essere 'riprodotto' per il test, senza l'obiettivo di DB:. Nessuna prova / dati Separazione complessità, la facilità di integrazione continua

Il mio quadro Accolito è un framework utile in questo modo (compresi strumento GUI studio per 'record' risultato DB): https://github.com/cchantep/acolyte

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