I test delle unità funzionano ma ci sono ancora errori?

3

Breve cronologia

Sono nuovo nel mondo degli oggetti di test unitari automatizzati e di simulazione; in precedenza eravamo soliti fare test unitari (inclusi test di integrazione e li abbiamo erroneamente chiamati test unitari) manualmente, ma ora abbiamo programmato di cambiare tutto a sto spingendo la nostra organizzazione a fare test unitari automatizzati .

Il problema è: ho un componente per il quale ho scritto test di unità (nota: non sto usando alcun TDD qui, il codice è scritto prima e poi vengono scritti i test di unità) ramo (se / else o loop) di codice. Se eseguo la suite di test Unit, si dice che ogni metodo funziona come previsto. Quello è buono; ma quando provo a percorrere l'intero flusso, vedo che ci sono molti bug (metodo mancante) che dovrebbero essere stati aggiunti. C'è un modo per controllarlo automaticamente?

Aggiorna Come per le risposte fornite da KeithS e Schleis, sembra che abbia bisogno di test funzionali (o test di integrazione). Ci sono dei collegamenti utili sui test funzionali automatizzati? L'ho provato su Google ma tutti mostrano risultati generici parlando di test manuali.

    
posta shankbond 02.08.2013 - 19:28
fonte

2 risposte

12

I test unitari sono solo un livello della gerarchia dei test automatici. Esistono test unitari per verificare che il codice che tu (lo sviluppatore) abbia effettivamente scritto si comporta come hai pensato quando lo hai scritto.

Ci sono due caveat inerenti al test unitario. Innanzitutto, la copertura non è esercizio. È possibile eseguire ogni riga di codice nella base di codice tramite uno o più test di unità, ma se non si asserisce, da qualche parte, quel codice che doveva fare qualcosa effettivamente lo ha fatto, finché non si ottiene un'eccezione, la test passa con o senza il codice facendo questa cosa chiave.

In secondo luogo, i test unitari per definizione esercitano piccoli pezzi isolati del codice (unità), assicurandosi che ciascun pezzo si comporti nel modo in cui lo sviluppatore pensa che dovrebbe. Non verificano che queste unità giochino bene l'una con l'altra (è un test di "integrazione"), né affermano che il codice, a qualsiasi livello, si comporta come il client pensa che dovrebbe ( è un test di "accettazione" e / o "end-to-end".

Questo secondo problema è il tuo problema principale nel caso in questione. Hai una copertura del 100% di test unitario, ma nessun test di integrazione, che proverebbe che i piccoli pezzi sono messi insieme nel modo giusto per fare il lavoro più grande che ti aspetti. Sembra che non ci siano test di accettazione automatici, che si avvicinano all'intero programma dall'alto verso il basso dal punto di vista di un utente finale. Questi sono i livelli di test, che possono essere automatizzati, che identificheranno il codice "mancante" in base al mancato rispetto dei criteri di accettazione.

    
risposta data 02.08.2013 - 19:44
fonte
3

Vuoi test funzionali che eseguano tutti i componenti che lavorano insieme. Un test in cui dai alla tua applicazione un input e fallo lavorare con tutti gli oggetti reali e poi controlla il tuo output. Questi test verificano che la connessione tra i test funzionino (e che esistano effettivamente dei metodi fittizi).

Anche con i test di scrittura, vuoi che l'intera applicazione venga eseguita da te o da un QA. Probabilmente avrai perso le cose o non hai considerato determinati scenari.

    
risposta data 02.08.2013 - 19:35
fonte