Differenza tra test unitario e sviluppo guidato da test

56

Dalla lettura delle descrizioni, capisco che nei test TDD vengono eseguiti prima di scrivere la funzione e in Unit Testing, è fatto in seguito.

Questa è la differenza principale, oppure i due termini non possono nemmeno essere confrontati come tali. Forse, Unit Testing è una parte integrata di TDD.

    
posta Shamim Hafiz 19.03.2011 - 15:27
fonte

7 risposte

95

Test unitario si riferisce a che stai testando, TDD a quando stai testando.

I due sono ortogonali.

Test unitario significa, beh, testare singole unità di comportamento. Un'unità di comportamento individuale è la più piccola unità di comportamento che può essere individualmente testata individualmente. (So che queste due definizioni sono circolari, ma in pratica sembrano funzionare abbastanza bene.)

Puoi scrivere test unitari prima di scrivere il tuo codice, dopo aver scritto il tuo codice o mentre scrivi il tuo codice.

TDD significa (di nuovo, un po 'ovvio) che permette ai tuoi test di guidare il tuo sviluppo (e il tuo design). Puoi farlo con test unitari, test funzionali e test di accettazione. Di solito, li usi tutti e tre.

La parte più importante di TDD è il mezzo D . Hai lasciato che i test ti guidassero . I test ti dicono cosa fare, cosa fare dopo, quando hai finito. Ti dicono quale sarà l'API, quale sarà il design. (Questo è importante: TDD non tratta prima di scrivere i test: ci sono molti progetti che scrivono prima i test ma non praticano il TDD: scrivere i test prima è semplicemente un prerequisito per essere in grado di permettere ai test di guidare lo sviluppo.)

    
risposta data 19.03.2011 - 16:30
fonte
21

Test unitario è un componente di Test Driven Development

È possibile eseguire test unitari senza eseguire lo sviluppo guidato da test. Tuttavia non è possibile eseguire lo sviluppo basato su test senza utilizzare i test unitari.

Quando esegui test delle unità tradizionali, scrivi test dopo hai scritto il tuo codice.

L'approccio Sviluppo guidato dal test è quello di scrivere il test di unità prima della scrittura del codice.

I più interessanti vantaggi del TDD (IMHO) rispetto al semplice Test unitario:

  • Il codice è completamente testato codice in anticipo. È un test indolore.
  • Ti costringe a progettare correttamente le classi.
  • Ti costringe anche a a mantenerlo semplicemente stupido .
  • Il ciclo di Red-Green-Refactor è l'assoluto procrastinatore!
risposta data 19.03.2011 - 15:57
fonte
13

TDD e Unit Testing sono due termini molto specifici che vengono spesso utilizzati in modo improprio.

TDD sta scrivendo un test che fallirà, quindi scrivendo la quantità minima di codice richiesta per farlo funzionare, quindi refactoring il codice per renderlo pulito. Questo viene fatto in cicli, fallito - > passare - > refactoring, aggiungendo un nuovo test per ogni requisito noto per il codice. Più recentemente, TDD è diventato ancora più specifico nello scrivere test di unità in quel ciclo, per distinguerlo da ATDD (un sottoinsieme di BDD) che sta scrivendo test di accettazione in un ciclo simile.

Unit Testing riguarda il test di un codice in unità piccole e isolate. La confusione comune qui è pensare che se si sta utilizzando uno strumento di test delle unità, come xUnit o Rspec, per eseguire i test che si stanno scrivendo i test unitari. Questo non è necessariamente vero. Questi strumenti possono essere utilizzati per eseguire i test utilizzando il framework Selenium: in questo caso si stanno scrivendo test di accettazione utilizzando un unit test runner. I test unitari sono test specifici che si concentrano su un piccolo pezzo di logica, isolati da tutto il resto per motivi di velocità (in modo da poterli eseguire spesso e ottenere feedback rapidi sui nuovi bug).

    
risposta data 19.03.2011 - 15:52
fonte
6

TDD è l'approccio per scrivere i casi di test prima dello sviluppo, come hai detto tu e poi lo sviluppatore scrive il codice per passare i casi di test. Unit Testing è un termine usato per descrivere un tipo ristretto di test oltre a test di sistema, test di integrazione e test di accettazione.

    
risposta data 19.03.2011 - 15:40
fonte
3

TDD è un approccio filosofico alla scrittura del codice: scrivi prima i test. I test che scrivi sono unit test.

    
risposta data 19.03.2011 - 16:30
fonte
1

Il modo in cui separo i due è considerare che TDD è meno un test, e altro ancora sulla progettazione del codice. I test unitari vengono quindi utilizzati per impostare le aspettative per il codice finale. Quando il codice di fine viene scritto e supera i test (specifiche), il codice è stato progettato utilizzando i test.

    
risposta data 19.03.2011 - 17:32
fonte
1

Tutte le risposte eccellenti. Vorrei solo aggiungere che il test unitario tende a considerare l''unità' come un piccolo componente, mentre il TDD si amplia per includere test di integrazione e accettazione.

(Alcune varianti TDD considerano l'unità come il più piccolo passo incrementale verso la funzionalità desiderata ...)

    
risposta data 19.03.2011 - 17:30
fonte

Leggi altre domande sui tag