Tutorial per unit test: cos'è, tipi, strumenti e ESEMPIO di prova

Sommario:

Anonim

Cos'è lo Unit Testing?

UNIT TESTING è un tipo di test del software in cui vengono testate singole unità o componenti di un software. Lo scopo è convalidare che ogni unità del codice software funzioni come previsto. Lo Unit Testing viene eseguito durante lo sviluppo (fase di codifica) di un'applicazione da parte degli sviluppatori. I test unitari isolano una sezione di codice e ne verificano la correttezza. Un'unità può essere una singola funzione, metodo, procedura, modulo o oggetto.

In SDLC, STLC, modello V, il test unitario è il primo livello di test eseguito prima del test di integrazione. Il test unitario è una tecnica di test WhiteBox che viene solitamente eseguita dallo sviluppatore. Tuttavia, in un mondo pratico a causa della mancanza di tempo o della riluttanza degli sviluppatori ai test, gli ingegneri del controllo qualità eseguono anche test di unità.

In questo tutorial imparerai-

  • Perché gli unit test?
  • Come eseguire gli unit test
  • Tecniche di unit test
  • Strumenti di unit test
  • Test Driven Development (TDD) e unit test
  • Mito del test unitario
  • Vantaggio del test unitario
  • Svantaggi degli unit test
  • Best practice per gli unit test

Perché gli unit test?

Il test unitario è importante perché gli sviluppatori di software a volte cercano di risparmiare tempo eseguendo test unitari minimi e questo è un mito perché i test unitari inappropriati portano a costi elevati di correzione dei difetti durante i test di sistema, i test di integrazione e persino i test beta dopo la creazione dell'applicazione. Se durante lo sviluppo iniziale viene eseguito un corretto unit test, alla fine si risparmia tempo e denaro.

Ecco i motivi principali per eseguire test unitari nell'ingegneria del software:

Livelli di unit test
  1. I test unitari aiutano a correggere i bug nelle prime fasi del ciclo di sviluppo e a risparmiare sui costi.
  2. Aiuta gli sviluppatori a comprendere la base del codice di test e consente loro di apportare modifiche rapidamente
  3. Buoni test unitari servono come documentazione del progetto
  4. I test unitari aiutano con il riutilizzo del codice. Migrare sia il codice che i test nel nuovo progetto. Modifica il codice fino a quando i test non vengono eseguiti di nuovo.

Come eseguire gli unit test

Per eseguire gli unit test , gli sviluppatori scrivono una sezione di codice per testare una funzione specifica nell'applicazione software. Gli sviluppatori possono anche isolare questa funzione per testare in modo più rigoroso che rivela dipendenze non necessarie tra la funzione testata e altre unità in modo che le dipendenze possano essere eliminate. Gli sviluppatori utilizzano generalmente il framework UnitTest per sviluppare casi di test automatizzati per i test unitari.

Lo Unit Testing è di due tipi

  • Manuale
  • Automatizzato

Il test unitario è comunemente automatizzato ma può comunque essere eseguito manualmente. L'ingegneria del software non favorisce l'una rispetto all'altra ma è preferibile l'automazione. Un approccio manuale al test di unità può impiegare un documento di istruzioni passo passo.

Con l'approccio automatizzato-

  • Uno sviluppatore scrive una sezione di codice nell'applicazione solo per testare la funzione. Successivamente avrebbero commentato e infine rimosso il codice di test quando l'applicazione viene distribuita.
  • Uno sviluppatore potrebbe anche isolare la funzione per testarla in modo più rigoroso. Si tratta di una pratica di test di unità più approfondita che prevede la copia e incolla del codice nel proprio ambiente di test rispetto al suo ambiente naturale. L'isolamento del codice aiuta a rivelare dipendenze non necessarie tra il codice in fase di test e altre unità o spazi dati nel prodotto. Queste dipendenze possono quindi essere eliminate.
  • Un programmatore utilizza generalmente un Framework UnitTest per sviluppare casi di test automatizzati. Utilizzando un framework di automazione, lo sviluppatore codifica i criteri nel test per verificare la correttezza del codice. Durante l'esecuzione dei casi di test, il framework registra i casi di test non riusciti. Molti framework contrassegneranno e segnaleranno automaticamente, in sintesi, questi casi di test non riusciti. A seconda della gravità di un errore, il framework potrebbe interrompere i test successivi.
  • Il flusso di lavoro di Unit Testing è 1) Crea casi di test 2) Revisione / rilavorazione 3) Baseline 4) Esegui casi di test.

Tecniche di unit test

Le tecniche di test unitario sono principalmente suddivise in tre parti che sono il test della scatola nera che implica il test dell'interfaccia utente insieme a input e output, il test della scatola bianca che implica il test del comportamento funzionale dell'applicazione software e il test della scatola grigia che viene utilizzato per eseguire il test suite, metodi di test, casi di test e analisi dei rischi.

Le tecniche di code coverage utilizzate in Unit Testing sono elencate di seguito:

  • Copertura della dichiarazione
  • Copertura decisionale
  • Copertura delle filiali
  • Copertura delle condizioni
  • Copertura della macchina a stati finiti

Per ulteriori informazioni, fare riferimento a https://www.guru99.com/code-coverage.html

Esempio di test unitario: oggetti fittizi

Lo unit test si basa sulla creazione di oggetti fittizi per testare sezioni di codice che non fanno ancora parte di un'applicazione completa. Oggetti finti riempiono per le parti mancanti del programma.

Ad esempio, potresti avere una funzione che necessita di variabili o oggetti non ancora creati. Nel test unitario, questi verranno contabilizzati sotto forma di oggetti fittizi creati esclusivamente ai fini dello unit test eseguito su quella sezione di codice.

Strumenti di unit test

Sono disponibili diversi software di unit test automatizzati per assistere i test unitari. Forniremo alcuni esempi di seguito:

  1. Junit: Junit è uno strumento di test gratuito utilizzato per il linguaggio di programmazione Java. Fornisce asserzioni per identificare il metodo di prova. Questo strumento verifica prima i dati e poi li inserisce nella parte di codice.
  2. NUnit: NUnit è un framework di test di unità ampiamente utilizzato per tutti i linguaggi .net. È uno strumento open source che consente di scrivere manualmente gli script. Supporta test basati sui dati che possono essere eseguiti in parallelo.
  3. JMockit: JMockit è uno strumento di test unitario open source. È uno strumento di copertura del codice con metriche di linea e percorso. Consente il mocking dell'API con la sintassi di registrazione e verifica. Questo strumento offre copertura di linea, copertura del percorso e copertura dei dati.
  4. EMMA: EMMA è un toolkit open source per l'analisi e il reporting di codice scritto in linguaggio Java. Emma supporta tipi di copertura come metodo, linea, blocco di base. È basato su Java, quindi è privo di dipendenze da librerie esterne e può accedere al codice sorgente.
  5. PHPUnit: PHPUnit è uno strumento di test di unità per programmatori PHP. Richiede piccole porzioni di codice chiamate unità e testa ciascuna di esse separatamente. Lo strumento consente inoltre agli sviluppatori di utilizzare metodi di asserzione predefiniti per affermare che un sistema si comporta in un certo modo.

Questi sono solo alcuni degli strumenti di unit test disponibili. Ce ne sono molti altri, specialmente per i linguaggi C e Java, ma sei sicuro di trovare uno strumento di unit test per le tue esigenze di programmazione indipendentemente dal linguaggio che usi.

Test Driven Development (TDD) e unit test

I test unitari in TDD implicano un uso estensivo di framework di test. Un framework di unit test viene utilizzato per creare unit test automatizzati. I framework di unit test non sono esclusivi di TDD, ma sono essenziali per esso. Di seguito esaminiamo alcune delle cose che TDD porta al mondo dei test unitari:

  • I test vengono scritti prima del codice
  • Affidati fortemente ai framework di test
  • Vengono testate tutte le classi nelle applicazioni
  • È possibile un'integrazione rapida e semplice

Mito del test unitario

Mito: richiede tempo e sono sempre troppo programmato Il mio codice è solido come una roccia! Non ho bisogno di unit test.

I miti per loro stessa natura sono false supposizioni. Queste ipotesi portano a un circolo vizioso come segue:

La verità è che i test unitari aumentano la velocità di sviluppo.

I programmatori pensano che il test di integrazione rileverà tutti gli errori e non eseguirà lo unit test. Una volta integrate le unità, errori molto semplici che avrebbero potuto essere facilmente individuati e risolti in unità testate richiedono molto tempo per essere rintracciati e corretti.

Vantaggio del test unitario

  • Gli sviluppatori che desiderano apprendere quali funzionalità sono fornite da un'unità e come utilizzarle possono esaminare gli unit test per acquisire una conoscenza di base dell'API dell'unità.
  • Il test unitario consente al programmatore di effettuare il refactoring del codice in un secondo momento e assicurarsi che il modulo funzioni ancora correttamente (ad esempio, test di regressione). La procedura consiste nello scrivere casi di test per tutte le funzioni e metodi in modo che ogni volta che una modifica causa un errore, possa essere rapidamente identificato e risolto.
  • A causa della natura modulare del test unitario, possiamo testare parti del progetto senza attendere che altre vengano completate.

Svantaggi degli unit test

  • Non ci si può aspettare che un test unitario rilevi ogni errore in un programma. Non è possibile valutare tutti i percorsi di esecuzione anche nei programmi più banali
  • Lo unit testing per sua stessa natura si concentra su un'unità di codice. Quindi non può rilevare errori di integrazione o errori a livello di sistema generale.

Si consiglia di utilizzare unit test insieme ad altre attività di test.

Best practice per gli unit test

  • I casi di unit test dovrebbero essere indipendenti. In caso di miglioramenti o modifiche ai requisiti, i casi di unit test non dovrebbero essere interessati.
  • Prova un solo codice alla volta.
  • Segui convenzioni di denominazione chiare e coerenti per i tuoi unit test
  • In caso di modifica del codice in qualsiasi modulo, assicurarsi che ci sia uno scenario di test unitario corrispondente per il modulo e che il modulo superi i test prima di modificare l'implementazione
  • I bug identificati durante il test unitario devono essere corretti prima di procedere alla fase successiva in SDLC
  • Adotta un approccio "prova come codice". Più codice scrivi senza test, più percorsi devi controllare per gli errori.

Sommario

  • UNIT TESTING è definito come un tipo di test del software in cui vengono testate singole unità o componenti di un software.
  • Come puoi vedere, ci possono essere molte cose coinvolte nei test unitari. Può essere complesso o piuttosto semplice a seconda dell'applicazione testata e delle strategie di test, degli strumenti e delle filosofie utilizzate. Il test di unità è sempre necessario a un certo livello. Questa è una certezza.