Come prova di codice Web?

voti
11

Qualcuno ha alcuni buoni consigli per la scrittura di codice di prova per lo sviluppo di database di back-end-dove c'è una forte dipendenza dello stato?

In particolare, voglio scrivere dei test per il codice che recuperano i record dal database, ma le risposte dipenderà dalle dati presenti nel database (che può cambiare nel corso del tempo).

Le persone di solito fanno un sistema di sviluppo separato con un database 'congelato' in modo che ogni data funzione deve sempre tornare la stessa identica set di risultati?

Sono abbastanza sicuro che questo non è un problema nuovo, quindi sarei molto interessato a imparare dalle esperienze altrui.

Ci sono buone articoli là fuori che trattano questo tema dello sviluppo web-based in generale?

Io di solito scrivere codice PHP, ma mi sarei aspettato tutti questi problemi sono in gran parte di lingua e di un quadro agnostico.

È pubblicato 05/08/2008 alle 22:58
fonte dall'utente
In altre lingue...                            


10 risposte

voti
5

Si dovrebbe guardare in DBUnit, o cercare di trovare un PHP equivalente (ci deve essere là fuori). Si può usare per preparare il database con uno specifico insieme di dati che rappresenta i vostri dati di test, e quindi ogni test non dipenderà più sul database e uno stato esistente. In questo modo, ogni test è autonomo e non si romperà durante l'ulteriore utilizzo di database.

Aggiornamento: Una rapida ricerca google ha mostrato un prolungamento unità DB per PHPUnit.

Risposto il 05/08/2008 a 23:03
fonte dall'utente

voti
3

Se siete più interessati a test livello dei dati, si potrebbe voler controllare questo libro: Patterns xUnit prova: refactoring di codice di prova . Sono sempre stato sicuro di me stesso, ma questo libro fa un grande lavoro per aiutare a enumerare i problemi come le prestazioni, la riproducibilità, ecc

Risposto il 06/08/2008 a 05:14
fonte dall'utente

voti
2

Usiamo un in-memory database (HSQL: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) lo rende facile per noi segnaliamo i nostri test di unità al db di prova, con il valore aggiunto che corrono più velocemente un fulmine ..

Risposto il 10/09/2008 a 13:02
fonte dall'utente

voti
2

Immagino che dipende quello del database che si sta utilizzando, ma Red Gate (www.red-gate.com) fanno uno strumento chiamato generatore di dati SQL. Questo può essere configurato in modo da riempire il vostro database con i dati alla ricerca sensibili di prova. Si può anche dire che usare sempre lo stesso seme nel suo generatore di numeri casuali in modo da dati 'random' è lo stesso ogni volta.

È quindi possibile scrivere i test di unità a fare uso di questi dati affidabili, ripetibili.

Per quanto riguarda il test del lato web delle cose, attualmente sto esaminando Selenio (selenium.openqa.org). Questo sembra essere una suite di test in grado cross-browser che vi aiuterà a funzionalità di test. Tuttavia, come con tutti questi strumenti di test sito web, non c'è modo vero e proprio per testare quanto bene queste cose sembrano in tutti i browser, senza lanciare un occhio umano su di loro!

Risposto il 06/08/2008 a 14:44
fonte dall'utente

voti
1

In generale sono d'accordo con Pietro, ma per la creazione e la cancellazione dei dati di test non vorrei usare direttamente SQL. Io preferisco usare alcune API CRUD che viene utilizzato nel prodotto per creare dati come simile alla produzione il più possibile ...

Risposto il 10/09/2008 a 12:31
fonte dall'utente

voti
1

Io proporrei di utilizzare tre database. Un database di produzione, un database di sviluppo (riempito con alcuni dati significativi per ogni sviluppatore) e un database di prova (con tavoli vuoti e forse un paio di righe che sono sempre necessari).

Un modo per testare il codice del database è:

  1. Inserire alcune file (utilizzando SQL) per inizializzare lo stato
  2. Eseguire la funzione che si desidera eseguire il test
  3. Confronta previsto con i risultati effettivi. Qui è possibile utilizzare il framework di unit testing normale
  4. Pulire le righe che sono state modificate (in modo che il prossimo periodo non vedrà la precedente esecuzione)

La pulizia potrebbe essere fatto in un modo standard (naturalmente, solo nel database di test) con DELETE * FROM table.

Risposto il 19/08/2008 a 19:40
fonte dall'utente

voti
1

Ecco la mia strategia (io uso JUnit, ma sono sicuro che ci sia un modo per fare l'equivalente in PHP):

Ho un metodo che viene eseguito prima di tutti i test di unità per una specifica classe di DAO. Si pone il database dev in uno stato conosciuto (aggiunge tutti i dati di test, etc.). Mentre corro test, ho tenere traccia di tutti i dati aggiunti alla stato conosciuto. Questi dati vengono eliminati in termine di ciascuna prova. Dopo tutti i test per la classe hanno eseguito, un altro metodo rimuove tutti i dati di test nel database dev, lasciandolo nello stato in cui era prima i test sono stati eseguiti. E 'un po' di lavoro per fare tutto questo, ma io di solito scrivere i metodi di una classe DBTestCommon in cui tutte le mie classi di test DAO può arrivare a loro.

Risposto il 11/08/2008 a 14:30
fonte dall'utente

voti
1

Si potrebbe provare http://selenium.openqa.org/ è più per il test GUI piuttosto che un test delle applicazioni livello di dati, ma fa registrare le vostre azioni che poi possono essere riprodotti per automatizzare i test su piattaforme diverse.

Risposto il 06/08/2008 a 13:06
fonte dall'utente

voti
1

Se si riesce a impostare il database con una quantità nota prima di eseguire i test e abbattere alla fine, allora saprete quali dati si sta lavorando.

Poi si può usare qualcosa come selenio per testare facilmente dal UI (supponendo Web-Based qui, ma ci sono un sacco di strumenti di test dell'interfaccia utente là fuori per altri UI-sapori) e rilevare la presenza di alcuni record tirato indietro dal database.

E 'sicuramente la pena di impostare sia una versione di prova del database - o fare il vostro script di test popolano il database con i dati noti come parte dei test.

Risposto il 05/08/2008 a 23:08
fonte dall'utente

voti
1

Ho lo stesso problema esatto con il mio lavoro e trovo che l'idea migliore è quella di avere uno script PHP per ricreare il database e quindi uno script separato dove butto dati folli a questo per vedere se si rompe esso.

Non ho mai usato alcun test delle unità o simili, quindi non posso dire se funziona o no mi dispiace.

Risposto il 05/08/2008 a 23:03
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more