Quando termina un'unità e inizia l'integrazione

3

In TDD scrivi la più piccola unità di codice per passare il test.

Ad esempio, se si costruisce un oggetto Stack , si desidera testare i metodi push e pop . Questo è abbastanza semplice. Quelle sono entrambe piccole unità che possono essere testate in isolamento. Nessuna dipendenza esterna. Riguarda quell'oggetto e quello che fa.

Questo non è il mondo però. La maggior parte degli oggetti dipende da molti altri oggetti. Questi oggetti potrebbero essere riempiti da una chiamata di servizio o da query DB.

So che l'uso di Mocks , Stubs e Fakes può aiutare qui ma ha anche limiti e insidie come il mocking troppo che essenzialmente lascia passare il test indipendentemente da cosa.

Esistono anche test di integrazione che possono assicurare che i database e i servizi si integrino ancora come previsto, ma questo è un passo al di sopra dei test unitari dalla mia comprensione. Da quello che ho raccolto questo potrebbe essere in un ambiente di sviluppo su un locale.

Nel complesso sembrerebbe che l'atto di rimuovere queste dipendenze sia più lavoro di quanto valga quasi. Che potrebbe portare a suite di test troppo ingegnerizzate.

Modifica (incluso titolo)

Piuttosto che capire cos'è l'unità più piccola (il metodo ringrazia Robert) Sembra che la mia domanda sia più:

  • Dove iniziano i test unitari e l'integrazione?
  • Ad esempio, un test di integrazione è stato scritto dallo sviluppatore come un test unitario e poi eseguito sul locale con una suite di test?
  • Se questo è il caso, allora come può qualcuno distinguere tra un test unitario e test di integrazione o dovrebbe?
  • I test unitari e di integrazione dovrebbero essere eseguiti contemporaneamente?
posta nerdlyist 09.08.2016 - 18:37
fonte

2 risposte

6

Where does unit-testing end and integration [testing] begin?

I test di integrazione iniziano quando si consente alle unità (metodi) di comunicare tra loro attraverso le loro dipendenze naturali e non a stub, mock o falsi.

is an integration test written by the developer like a unit test and then ran on the local with a test suite?

Può essere. Può anche essere un test da riga di comando, un file batch o l'applicazione effettiva automatizzata tramite alcuni strumenti come Selenium.

If that is the case then how can someone distinguish between a unit test and integration tests or should they?

Distingui tra un test unitario e un test di integrazione osservando se nel test vengono utilizzati mock o dipendenze reali.

La distinzione tra un vero database o servizio e uno deriso è importante. Mocking dimostra solo che il metodo in prova si comporta come ci si aspetta da in isolamento. Potrebbe avere un comportamento significativamente diverso quando viene eseguito nel contesto del suo ambiente operativo reale.

Should unit-test and integration testing all be running at the same time?

I metodi di test dovrebbero sempre essere scritti in modo che ognuno possa essere eseguito indipendentemente dagli altri. La maggior parte dei framework di test consente di eseguire più di un test contemporaneamente.

    
risposta data 09.08.2016 - 19:28
fonte
0

Proverò a rispondere ai tuoi punti elenco.

• Dove inizia il test unitario e l'integrazione?

Non appena si avvia lo sviluppo. Mantieni i test focalizzati. Sapere quando un test unitario è una buona scelta rispetto a un test di integrazione. Prova e isola la tua logica aziendale in modo che i test unitari possano essere scritti facilmente con una quantità minima di simulazione / falsificazione / stub.

• Ad esempio, un test di integrazione scritto dallo sviluppatore come un test di unità e poi eseguito sul locale con una suite di test?

Sì, possono essere eseguiti come test unitari. Per i test di integrazione, è possibile eseguirli localmente puntando all'ambiente locale o all'ambiente più basso dello stack. In genere questi sarebbero eseguiti / eseguiti dallo sviluppatore per garantire che il codice funzioni con dati reali e servizi reali.

• Se questo è il caso, allora come può qualcuno distinguere tra un test unitario e test di integrazione o dovrebbe?

Sì, dovresti distinguere. Con la maggior parte dei framework di testing questo è facile con attributi di test aggiuntivi.

[Test]
[Category=Unit]

[Test]
[Category=Integration]

Il tuo team avrebbe inventato le categorie.

• I test unitari e di integrazione dovrebbero essere eseguiti contemporaneamente?

No, i test unitari vengono eseguiti durante la generazione sul computer di generazione e i test di integrazione vengono eseguiti dopo la distribuzione in un ambiente. Se si classifica ogni test, il test runner può essere configurato solo per eseguire una determinata suite di test.

Se un test unitario fallisce, la build dovrebbe fallire. Se un test di integrazione fallisce, potrebbero esserci problemi con l'ambiente o il codice. Non si dovrebbe distribuire il codice in un ambiente superiore finché il problema non viene identificato e risolto.

Come accennato in precedenza, i test di integrazione possono essere attivati manualmente dallo sviluppatore per verificare la correttezza del codice con le chiamate di servizio effettive, ma per gli scenari automatizzati = > build = unit test: deployment = test di integrazione

    
risposta data 09.08.2016 - 19:31
fonte

Leggi altre domande sui tag