2009-07-16 23 views
16

Ammetto che non ho quasi nessuna esperienza di unittesting. Ho fatto un tentativo con DUnit qualche tempo fa, ma ho rinunciato perché c'erano così tante dipendenze tra le classi nella mia applicazione. È un'applicazione Delphi piuttosto grande (circa 1,5 milioni di linee sorgente) e siamo una squadra che la mantiene.Come avviare il test vecchio e nuovo del test unitario?

Il test per ora viene eseguito da una sola persona che lo utilizza prima del rilascio e segnala bug. Ho anche installato alcuni test della GUI in TestComplete 6, ma spesso fallisce a causa di cambiamenti nell'applicazione.

Bold for Delphi viene utilizzato come framework di persistenza contro il database. Siamo tutti d'accordo che l'unittesting è la strada da percorrere e abbiamo in programma di scrivere una nuova applicazione in DotNet con ECO come framework di persistenza.

Non so da dove iniziare con l'unittesting ... Qualsiasi buon libro, URL, buone pratiche ecc.?

risposta

12

Bene, la sfida in unit test non è il test stesso, ma in scrittura di codice verificabile. Se il codice è stato scritto non pensando di test, allora probabilmente avrai un momento davvero difficile.

In ogni caso, se è possibile refactoring, fare refactoring per renderlo testabile. Non mescolare la creazione di oggetti con la logica ogni volta che è possibile (non conosco il delphi, ma potrebbe esserci qualche framework di dipendenze per aiutare in questo).

This blog ha un sacco di buona visione di test.Per esempio, controlla this article (il mio primo suggerimento era basato su di esso).

Per quanto riguarda un suggerimento, provare prima a testare i nodi foglia del codice, quelle classi che non dipendono da altre. Dovrebbero essere più facili da testare, dal momento che non richiedono simulazioni.

+0

Sono assolutamente d'accordo, grazie per i vostri commenti. La nostra vecchia applicazione Delphi (iniziata intorno al 1999) non era stata scritta pensando ai test. Probabilmente non sarà mai un buon test unitario perché richiede così tanto tempo per scrivere. Ma quando iniziamo con la nuova applicazione C# non vogliamo ripetere lo stesso errore. –

3

Uno degli approcci più diffusi è quello di scrivere i test unitari mentre si modifica il codice. Tutti i nuovi codici ottengono i test unitari e per ogni codice che si modifica si scrive prima il test, lo si verifica, lo si modifica, lo si ri-verifica e quindi si scrive/si risolve qualsiasi test necessario a causa delle modifiche.

Uno dei grandi vantaggi di avere la copertura dei test buona unità è essere in grado di verificare che le modifiche apportate non inavvertitamente rompere qualcos'altro. Questo approccio ti consente di farlo, concentrando i tuoi sforzi sui tuoi bisogni immediati.

L'approccio alternativo che ho assunto è quello di sviluppare i miei test di unità tramite cooperative :) unit test

+0

Sì, questo è il Santo Graal, di apportare modifiche più grandi senza paura di rompere qualcosa quando sembra ok. –

7

di scrittura per il codice legacy di solito richiede un sacco di refactoring. eccellente libro che copre questo è Michael Piuma di "lavorare efficacemente con Legacy Codice"

Un ulteriore suggerimento: utilizzare uno strumento di copertura di unit test per indicare i progressi in questo lavoro. Non sono sicuro di quali siano gli strumenti di copertura validi per il codice Delphi. Immagino che questa sarebbe una domanda/argomento diverso.

Working Effectively with Legacy Code

+3

Il libro di Feathers è nella mia libreria, a portata di mano. Un avvertimento a riguardo: Feathers è molto severo riguardo a ciò che considera un test unitario decente e questo può spaventare i principianti dei test unitari. Non lasciare che ti spaventi! A parte questo, un grande libro! – azheglov

+1

Sono d'accordo che questo è un libro eccellente, tuttavia è un po 'asciutto. Sto inserendo i test in un'applicazione a cui sto lavorando, al momento ogni test copre una grande porzione di codice, ma dato che devo modificare il codice, l'ho rifattorizzato per renderlo più testabile con più fine granularità. Se non sai molto sul refactoring, dovresti prendere anche un libro o due su questo. Forse il classico Refactoring di Martin Fowler. – Alister

1

per NET unit testing leggere questo: "The Art of Unit Testing: con esempi in .NET"

Informazioni su di buone pratiche:
Quello che hai detto è giusto: A volte, è test unitari difficili da scrivere a causa della dipendenza tra classi ... Quindi scrivi i test unitari subito dopo o poco prima ;-) l'implementazione delle classi. In questo modo, se hai qualche difficoltà a scrivere i test, forse significa che hai un problema di progettazione!

+0

Sì, è spesso difficile scrivere test unitari per codice legacy. Ma è possibile con te refactoring il tuo codice. Ci sono molti libri che trattano questo e uno eccellente è "Working Effectively with Legacy Code" di Michael Feather. –

2

Quando si lavora con codice legacy, gli oggetti fittizi sono davvero utili per creare test di unità.

Date un'occhiata a questa domanda per quanto riguarda Delphi e schernisce: What is your favorite Delphi mocking library?