Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012



Documenti analoghi
Tale attività non è descritta in questa dispensa

Test di unità con JUnit4

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

4 3 4 = 4 x x x 10 0 aaa

Eclipse - Nozioni Base

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Database 1 biblioteca universitaria. Testo del quesito

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Funzioni in C. Violetta Lonati

Configurare TPTP in Eclipse e testare un applicazione

File, Modifica, Visualizza, Strumenti, Messaggio

Guida all uso di Java Diagrammi ER

Concetto di Funzione e Procedura METODI in Java

Il calendario di Windows Vista

Gestione delle formazione

Uso di base delle funzioni in Microsoft Excel

2.7 La cartella Preparazioni e CD Quiz Casa

Aggiornamento programma da INTERNET

Esercizio data base "Biblioteca"

Accise Settore Prodotti Alcolici Manuale d uso

2015 PERIODO D IMPOSTA

L amministratore di dominio

Registratori di Cassa

Introduzione all uso di Eclipse

Introduzione a Dev-C++

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

SOMMARIO... 3 INTRODUZIONE...

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Manuale di istruzioni sulle maschere per il calcolo del punteggio e del voto (unico) degli studenti che sostengono la Prova nazionale 2011

Come modificare la propria Home Page e gli elementi correlati

10 - Disegno di sezioni e profili da punti topografici.

4. Fondamenti per la produttività informatica

A39 MONITORAGGIO ALLIEVI WEB REGISTRO INFORMATIZZATO MANUALE OPERATIVO

Manuale. Interreg. Workflow di Ripianificazione. Manuale workflow di ripianificazione 1/22

Oggetti Lezione 3. aspetti generali e definizione di classi I

STAMPA UNIONE DI WORD

PRODUZIONE PAGELLE IN FORMATO PDF

Gestione Risorse Umane Web

PROCEDURA DI INSTALLAZIONE DEI SOFTWARE E DEL DRIVER USB AIM

FISH Sardegna ONLUS. Manuale Utente.

MANUALE UTENTE INFOCAR REPAIR ACCESSO SMARTPHONE/TABLET

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Convertitori numerici in Excel

Per effettuare la stampa di una cartella di lavoro si accede al comando. Stampa dal menu File o si utilizza il pulsante omonimo sulla barra

Manuale Utente per WebBrainstorm

Modulo 3 - Elaborazione Testi 3.5 Stampa unione

GESTIONE INCASSI SAGRA. Ver. 2.21

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

Dott.ssa Michela Nelli. Dott.ssa Ilaria Giannelli. Dott. Francesco Pennasilico. Aggiornato al 03/06/2013

L interfaccia utente di Office 2010

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Corso introduttivo all utilizzo di TQ Qualifica

Il pacchetto contiene sia l ambiente di sviluppo sia i driver per la scheda.

1. Il Client Skype for Business

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/ fax: 041/

MAUALE PIATTAFORMA MOODLE

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Manuale d uso Software di parcellazione per commercialisti Ver [05/01/2015]

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Word. Cos è Le funzioni base Gli strumenti. 1

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

GUIDA UTENTE PRIMA NOTA SEMPLICE

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

ELENCO CLIENTI FORNITORI Patch1

TUTORIAL DI DOCMAN RC2 PER UTILIZZATORI FINALI di

Procedura di iscrizione alla Piattaforma On Line

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2015

GateManager. 1 Indice. tecnico@gate-manager.it

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

istruzioni per l uso

Il programma CONFELMOD CAD creazione e modifica

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

10 - Programmare con gli Array

Modello per la compilazione della scheda progetto SK_3.1.xls (da utilizzarsi per la presentazione di progetti di attività formative)

RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL

Matematica in laboratorio

TUTORIAL PER UTILIZZO CATALOGO RICAMBI WEB

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Il sistema C.R.M. / E.R.M.

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Aggiornamento Titoli

Corso Eclipse. Prerequisiti. 1 Introduzione

Procedura di installazione di Xubuntu 8.10 su un PC

WORD 97 SCRIVERE UNA TESI DI LAUREA

Formattare un PC con Windows 7. Guida Completa

Inizializzazione, Assegnamento e Distruzione di Classi

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

OSSERVATORIO REGIONALE CONTRATTI PUBBLICI DI LAVORI, SERVIZI E FORNITURE

Transcript:

Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono automatizzati ovvero, è possibile eseguire in modo automatico un gran numero di test ed ottenere una risposta sintetica dell esito del test barra verde: test passato barra rossa: test fallito è poi possibile vedere in dettaglio in quali casi è fallito il test per test case si intende una classe di test composta da uno o più metodi di test attenzione, l uso di JUnit è basato su alcune caratteristiche di Java che non saranno spiegate in dettaglio in questo corso tuttavia, è possibile usare Junit anche senza comprendere tutto in dettaglio 2

Metodi di test Useremo JUnit per effettuare il test di un metodo per semplicità, di un metodo parametrico che calcola e restituisce un valore (niente effetti collaterali) il test di un metodo richiede di eseguire il metodo per ciascun dataset scelto per la verifica del metodo intuitivamente, va definito un metodo di test per ciascun dataset scelto Ciascun singolo metodo di test ha lo scopo di verificare il funzionamento del nostro codice in un singolo caso con riferimento a uno specifico dataset contiene un invocazione del metodo in esame ha lo scopo di confrontare il comportamento atteso del metodo con il comportamento effettivo ovvero, di confrontare il risultato atteso con il risultato effettivamente calcolato dal metodo questo confronto viene realizzato mediante un asserzione 3 Metodi di test esempio Supponiamo di voler verificare un metodo int fattoriale(int n) di una classe Fattoriale che calcola il fattoriale di un numero naturale n quali dataset per verificare questo metodo? è necessario verificare il funzionamento del metodo almeno per i seguenti valori di n: 0, 1 e 4 quali asserzioni per verificare questo metodo? il fattoriale di 0 vale 1 il fattoriale di 1 vale 1 il fattoriale di 4 vale 24 Come vedremo, questi ragionamenti sono necessari alla predisposizione di un test JUnit ci fornisce uno strumento per realizzare un test di questo tipo in modo semplice 4

Per prima cosa, è necessario avviare Eclipse e creare un nuovo progetto Java o aprire un progetto Java esistente nell ambito di questo progetto possiamo poi definire la classe che vogliamo verificare ad esempio la classe Fattoriale public class Fattoriale { /* Calcola il fattoriale di n. */ public static int fattoriale(int n) { // pre: n>=0 int fatt; // il fattoriale di n int i; // per iterare tra 1 e n /* calcola il fattoriale di n */ fatt = 1; for (i=1; i<n; i++) { fatt *= i; return fatt; 5 6 A questo punto possiamo creare una classe di test per la classe Fattoriale da Eclipse, selezioniamo New -> JUnit Test Case come nome ( name ) del test possiamo usare TestFattoriale come classe sotto test ( Class under test ) indichiamo Fattoriale è importante che in alto sia selezionata la voce New JUnit 4 test tutte le altre caselle possono rimanere non selezionate poi premiamo Finish

Con le versioni precedenti di Eclipse, può essere però utile premere Next (anziché Finish), e selezionare il metodo che si vuole testare nel nostro esempio, il metodo fattoriale della classe Fattoriale poi premiamo Finish 7 La prima volta che eseguiamo questa operazione in un progetto ci viene proposta la seguente schermata rispondiamo OK 8

Questo è il codice generato automaticamente da Eclipse è la classe di test TestFattoriale che contiene un solo metodo di test di nome test import static org.junit.assert.*; import org.junit.test; public class TestFattoriale { public void test() { fail("not yet implemented"); è un annotazione che indica a JUnit che quello che segue è, appunto, un metodo di test fail(...) è invece un asserzione che fallisce sempre 9 A questo punto è già possibile eseguire il test anche se già sappiamo che fallirà con il tasto DESTRO del mouse non il sinistro clicchiamo sul nome del file per la classe di test TestFattoriale.java selezioniamo la voce Run As -> JUnit Test 10

Ecco il risultato dell esecuzione del test barra rossa 11 Ora possiamo modificare il test andando a prendere in considerazione la prima asserzione che avevamo scelto il fattoriale di 0 vale 1 modifichiamo il metodo di test test per prima cosa lo chiamiamo testfattorialezero dobbiamo usare l asserzione assertequals(valoreatteso, valoreeffettivo) questa asserzione ha successo se le espressioni valoreatteso e valoreeffettivo hanno lo stesso valore e fallisce altrimenti le espressioni di cui vogliamo confrontare i valori sono 1 il valore atteso di fattoriale(0) Fattoriale.fattoriale(0) il risultato fornito dall effettiva invocazione del metodo 12

Ora possiamo modificare il test andando a prendere in considerazione la prima asserzione che avevamo scelto il fattoriale di 0 vale 1 import static org.junit.assert.*; import org.junit.test; public class TestFattoriale { public void testfattorialezero() { assertequals(1, Fattoriale.fattoriale(0)); 13 Ecco il risultato dell esecuzione del test barra verde 14

Possiamo modificare il test aggiungendo la seconda asserzione scelta (copia-incolla-modifica il test già definito) il fattoriale di 1 vale 1 import static org.junit.assert.*; import org.junit.test; public class TestFattoriale { public void testfattorialezero() { assertequals(1, Fattoriale.fattoriale(0)); public void testfattorialeuno() { assertequals(1, Fattoriale.fattoriale(1)); anche in questo caso il test ha successo barra verde 15 Infine, aggiungiamo anche il metodo di test per la terza asserzione il fattoriale di 4 vale 24 import static org.junit.assert.*; import org.junit.test; public class TestFattoriale { public void testfattorialezero() { assertequals(1, Fattoriale.fattoriale(0)); public void testfattorialeuno() { assertequals(1, Fattoriale.fattoriale(1)); public void testfattorialequattro() { assertequals(24, Fattoriale.fattoriale(4)); 16

In questo caso il test fallisce barra rossa 17 L interfaccia di JUnit riporta delle indicazioni utili sul fallimento del test l esecuzione di testfattorialezero e testfattorialeuno è avvenuta con successo (spunta verde) tuttavia, l esecuzione di testfattorialezero è fallita (crocetta blu) la segnalazione del fallimento è java.lang.assertionerror: expected:<24> but was:<6> poiché il valore calcolato 6 è uguale a 3! anziché a 4!, potremmo aver commesso un errore di uno 18

In effetti, nel metodo fattoriale abbiamo commesso un errore di uno /* Calcola il fattoriale di n. */ public static int fattoriale(int n) { // pre: n>=0 int fatt; // il fattoriale di n int i; // per iterare tra 1 e n /* calcola il fattoriale di n */ fatt = 1; for (i=1; i<n; i++) { fatt *= i; return fatt; possiamo correggere l errore e ripetere l esecuzione del test 19 Barra verde ora il test ha successo 20

Riassumendo Riassumendo ogni volta che definiamo una classe C è bene definire una classe di test per la classe C in alcuni casi è utile definire una classe di test per ciascun metodo M di C per testare un metodo M scegliamo i dataset per il metodo M per ciascun dataset D per M definiamo un metodo di test nella classe di test per realizzare un metodo di test utilizziamo un asserzione che confronta il comportamento atteso del metodo con il comportamento effettivo del metodo il risultato atteso di un metodo M va indicato con un letterale, il risultato effettivo dell esecuzione di M va indicato con un invocazione del metodo 21 Asserzioni Ciascuna asserzione è un affermazione che è vera (se non ci sono errori) ma che invece risulta falsa in caso di errori nel nostro metodo o nella nostra classe se tutte le asserzioni (in tutti i metodi di test) sono vere il test ha successo barra verde se almeno un asserzione (in un metodo di test) è falsa il test fallisce barra rossa di solito va scritta una (e una sola) asserzione per ciascun metodo di test 22

Asserzioni JUnit offre diversi tipi di asserzioni la più comune è assertequals(valoreatteso, valoreeffettivo) ha successo se valoreatteso e valoreeffettivo sono uguali JUnit usa == per confrontare valori primitivi e equals per confrontare oggetti in alcuni casi l asserzione è una condizione che non è relativa ad un uguaglianza si possono usare le seguenti asserzioni asserttrue(condizione) ha successo se la condizione condizione è vera e fallisce altrimenti assertfalse(condizione) ha successo se la condizione condizione è falsa e fallisce altrimenti un altra asserzione utile è assertarrayequals(arrayatteso, arrayeffettivo) ha successo se gli array arrayatteso e arrayeffettivo sono uguali 23 Esecuzione di una classe di test Come viene eseguito un test case (una classe di test)? import static org.junit.assert.*; import org.junit.test; public class TestFattoriale { public void testfattorialezero() { assertequals(1, Fattoriale.fattoriale(0)); public void testfattorialeuno() { assertequals(1, Fattoriale.fattoriale(1)); 24

Esecuzione di una classe di test Come viene eseguito un test case (una classe di test)? intuitivamente, JUnit esegue ordinatamente tutti i metodi di test ovvero quelli che hanno l annotazione ogni asserzione è in effetti un invocazione di metodo la cui esecuzione richiede che prima vengano valutati i suoi parametri e dunque calcolato il risultato atteso ed eseguito il metodo sotto test e calcolato il risultato effettivo JUnit tiene traccia dell esito del test che viene aggiornato durante l esecuzione dei diversi metodi di test e in particolare quando ne viene valutata l asserzione dopo che sono stati eseguiti tutti i metodi di test, allora JUnit mostra un rapporto sull esito del test sintetico, mediante la barra verde o rossa dettagliato, sotto la barra, dicendo quali metodi di test hanno avuto successo e quali sono falliti per i metodi falliti, viene mostrata una descrizione del fallimento ad es., il risultato atteso era 24 ma è stato 6 25