Domanda

Due domande su test di unità.

  1. Ho scritto unit test per un po ', ma di solito sono a classi di test ho già avevano scritto. Recentemente ho letto un articolo (Si mente un vecchio articolo) che dice si dovrebbe scrivere unit test prima si inizia a scrivere il codice.

    C'è qualcuno che in realtà seguono questa metodologia? Sembra un buon idea sulla carta, ma in pratica è vero?

  2. In caso di scrivere unit test per vedere come il metodo di maniglie male / input dannoso? Ovviamente si vorrebbe prove di scrivere contro funzioni che sono specificamente destinati ad manico "utente" di ingresso per vedere come si gestisce l'input male / dannoso, ma per quanto riguarda le funzioni che non dovrebbe mai avere questo tipo di input passato a loro? A che punto è il confine?
È stato utile?

Soluzione

La metodologia di scrittura di unit test prima che le classi si chiama Test-Driven Development (TDD ) e fu reso popolare da Kent Beck nei primi anni 2000. L'idea è che si scrive un test che descrive la funzionalità di cui avete bisogno. Inizialmente, questo test avrà esito negativo. Come si scrive la classe, il test viene superato. Si refactoring il test per aggiungere funzionalità più desiderato, quindi refactoring la classe per rendere questo nuovo passaggio di prova. La classe ha raggiunto i suoi obiettivi, non appena passano i test. Naturalmente, questo scale fino al di là di classi pure.

Per quanto riguarda i tipi di test di scrivere, dipende se si sta testando un'API pubblica o un privato API. API pubbliche dovrebbero avere più ampie prove scritte per garantire che l'ingresso è ben formata, soprattutto se non vi fidate pienamente gli utenti del tuo API. API private (metodi che vengono chiamati solo dal vostro codice) può probabilmente ottenere via senza questi test -. Ho il sospetto che ci si può fidare il proprio team di sviluppo di non passare a dati non validi a loro

Altri suggerimenti

Test Driven Development è un concetto piuttosto diffusa. L'idea di base è che si sta cercando di scrivere il codice solo che è necessario soddisfare alcuni requisiti per il software. Quindi, si scrive un test per il requisito, e quindi il codice per far passare il test.

Io personalmente non usare TDD, ma so che le persone che lo fanno. I miei pensieri personali sono che è molto utile se si sta lavorando su qualcosa che è più application-driven, come un'interfaccia di database o utente. Ma, per qualcosa che è più algoritmo-pesanti (come un modello fisico), trovo che mi si spezza il filo del discorso e si mette di mezzo.

Scrivere i test di unità prima è una pratica abbastanza comune. Un grande vantaggio è che non basta scrivere test che il codice passerà, ma piuttosto test che definiscono ciò che è importante, ciò che si sta cercando di ottenere, e ciò che si vuole fare in modo non accadrà. Si può aiutare a carne fuori il vostro disegno. Inoltre, è possibile controllare lo speck con gli stakeholder esterni prima di codice.

Per quanto riguarda cosa test di scrivere, che è un po 'soggettivo in base al tempo che avete. Non vorrei andare codice di vagliare pazzo per gli scenari non potrà mai affrontare. Detto questo, è incredibile quello in ingresso rende al codice che "non potrà mai vederlo". Quindi, più test sono migliori, ma ci sono sicuramente rendimenti decrescenti a un certo punto.

La lingua si esegue la codifica in materia. linguaggi dinamici richiedono ulteriori test, perché il compilatore cattura meno problemi e bug può essere più difficile da pista (dal momento che possono propagarsi ulteriormente dall'emissione input iniziale). Almeno, questo è il mio parere.

Inoltre fa una differenza in cui l'input proviene. L'opinione pubblica deve essere considerato positivamente dannoso (cioè. Il web), i dipendenti devono essere incompetente assunta, e anche compagni di programmatori (e voi stessi!) Deve essere assunto per essere almeno imprudente. Ma il pericolo cade come ci si avvicina al vostro cerchio interno.

  

C'è qualcuno che in realtà seguono questa metodologia?

Sì.

  

Mi sembra una buona idea sulla carta, ma in pratica si tratta?

Sì.

  

In caso di scrivere unit test per vedere come il metodo di maniglie male / input dannoso?

Sì.

  

Che dire di funzioni che non dovrebbe mai avere questo tipo di input inviato a loro? A che punto è il confine?

Quando si muove da un software alla psicosi.

È possibile - se si vuole - i test di scrittura per situazioni impossibili. Tuttavia, stai sprecando il vostro tempo e il vostro datore di lavoro in modo evidente.

È scrivere test per definiti i casi d'uso. E questo è tutto.

Non si fanno su e casi di test casuali in base alla vostra fantasia.

Che cosa succede se? Che cosa succede se le definiti i casi d'uso sono incompleti? Bummer. Si scrive test per la, contrattuale, l'interfaccia pubblico ufficiale - e niente di più

.

Che cosa succede se il disegno è inadeguata e ti rendi conto che l'interfaccia data è pieno di specifiche incomplete, contraddizioni e falle di sicurezza? Questo non ha nulla a che fare con il test. Questa è solo la programmazione. Bad design è una cattiva progettazione.

Che cosa succede se un po 'sociopatico maligno prende il codice e l'utilizza in un modo che supera (o in altro modo non riesce a soddisfare) le specifiche definite? Bummer. Il sociopatico vince. Sono stati in grado di mettere il vostro codice nella situazione impossibile non hai testato il suo. Acquistare una birra per essere così intelligente.

C'è una differenza di mentalità tra il test-prima e dopo il test-. Scrivere test prima è una forma di progettazione , in quanto si sta progettando l'interfaccia del vostro codice e la definizione di comportamento previsto. Quando poi si scrive il codice che supera i test, che convalida il vostro disegno. E alla fine dello sviluppo, vi capita di avere una suite di test già in atto!

Con test-Dopo, è necessario stare attenti a evitare la trappola di scrivere test che il codice esistente passerà. E 'un obiettivo diverso, e non si ottiene tanto fuori di esso, come il test-prima della versione.

C'è già un un buon gruppo piuttosto di risposte, ma vorrei dire una più pensare al numero domanda 2.

Se fate i vostri unittest codice "dati driven", che non dovrebbe importa se il codice sta testando "cattivo" o ingresso "buono". Ciò che conta è che hai insieme di dati abbastanza grande che copre entrambe.

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