php flex and more!
Tutorial: Unit testing con JUnit
Come promesso nell’articolo sul Test Driven Development (anche se ho fatto passare un pò di tempo
!), è giunto il momento di esplorare la libreria JUnit, necessaria per la scrittura dei test unitari in linguaggio Java.
In questo articolo è presentata “solo” la libreria e non vengono illustrate le regole da seguire per poter scrivere correttamente i test delle nostre applicazioni!
La libreria
JUnit è un progetto open source gestito da Kent Beck e scaricabile all’indirizzo http://github.com/KentBeck/junit/downloads.
Mettiamoci all’opera
Quando si vuole testare il funzionamento di una classe, è necessario scrivere un’altra classe (!) che, per convenzione, viene sempre chiamata con lo stesso nome della classe da testare più il suffisso “Test”.
Supponiamo di avere una classe MathOp (di seguito) che svolge le operazioni di addizione e sottrazione, e di voler scrivere lo unit test.
-
public class MathOp {
-
public MathOp() {
-
}
-
-
public int add(int a, int b) {
-
return a + b;
-
}
-
-
public int sub(int a, int b) {
-
return a – b;
-
}
-
}
Come accennato prima, è necessario creare un’altra classe, che deve essere chiamata MathOpTest. Per utilizzare la libreria JUnit è necessario aggiungerla al build path del progetto (lo si può fare direttamente dalle preferenze del progetto di Eclipse, ad esempio).
Importare le classi di JUnit
Per utilizzare i costrutti JUnit per effettuare le asserzioni sui risultati dei metodi è necessario importare, prima di tutto, la libreria e importare staticamente le classi del package org.junit.Assert:
-
import org.junit.*;
-
import static org.junit.Assert.*;
La classe di test
A questo punto siamo pronti per scrivere la classe di test. Per indicare a JUnit quali sono i metodi che effettuano i test è necessario contraddistinguerli con l’annotazione @Test. In questo modo JUnit riconoscerà i metodi che contengono le asserzioni e li tratterà di conseguenza.
-
import org.junit.*;
-
import static org.junit.Assert.*;
-
-
public class MathOpTest {
-
@Test
-
public void testAdd(){
-
MathOp a = new MathOp();
-
assertEquals(4, a.add(3, 1));
-
}
-
-
@Test
-
public void testSub(){
-
MathOp a = new MathOp();
-
assertEquals(-4, a.add(-3, 1));
-
}
-
}
Le asserzioni
Con JUnit è possibile effettuare diversi tipo di test (con asserzioni diverse). Al momento dell’esecuzione, un test si considera superato se tutte le condizioni specificate risultano verificate.
- assertEquals(expected, actual), assertArrayEquals(expected, actual) : richiede che il valore ‘expected’ sia uguale a ‘actual’
- assertTrue(cond): richiede che ‘cond’ abbia come valore: ‘true’
- assertFalse(cond): richiede che ‘cond’ abbia come valore ‘false’
- assertNull(obj): richiede che ‘obj’ sia un riferimento nullo
- assertNotNull(obj): richiede che ‘obj’ sia un riferimento non nullo
@Before
Nell’esempio precedente, in ognuno dei due test case è stato istanziato un oggetto MathOp. JUnit mette a disposizione degli sviluppatori una funzionalità per eseguire delle istruzioni prima che vengano eseguiti i test. Il metodo setUp() ha un’annotazione @Before che serve ad indicare a JUnit che il metodo va eseguito prima dell’esecuzione dei test case. In questo modo, il codice per inizializzare oggetti o risorse (ad esempio una connessione al DBMS) è concentrato in un solo punto della classe di test.
Analogamente a @Before, l’annotazione @After indica a JUnit di eseguire il metodo dopo l’esecuzione dei test case.
-
import org.junit.*;
-
import static org.junit.Assert.*;
-
-
public class MathOpTest {
-
private MathOp a;
-
-
@Before
-
public void setUp(){
-
a = new MathOp();
-
}
-
-
@Test
-
public void testAdd(){
-
assertEquals(4, a.add(3, 1));
-
}
-
-
@Test
-
public void testSub(){
-
assertEquals(-4, a.sub(-3, 1));
-
}
-
}
Lanciare i test
I test possono essere lanciati direttamente da Eclipse selezionando la classe di test e cliccando su “Run as” -> “JUnit Test”.
E’ possibile utilizzare anche la linea di comando o i task junit e junitreport di Apache Ant.
Di seguito uno screenshot dei risultati del test in Eclipse:

I due test hanno avuto entrambi esito positivo! Nel caso si verifichino errori verranno conteggiati alla voce Errors, mentre le condizioni non verificate saranno conteggiate alla voce Failures.
Conclusioni
In questo articolo è stata fatta una semplice introduzione alla libreria, che dovrebbe essere utilizzata in ogni progetto software sviluppato in Java per garantire il test automatico del codice sorgente.
Per approfondimenti vi rimando al sito http://www.junit.org/.
| Stampa l'articolo | Questo articolo è stato pubblicato da spyre il 30 agosto 2010 alle 22:23, ed è archiviato come Agile, Java. Puoi seguire i commenti a questo post attraverso RSS 2.0. Puoi pubblicare un commento o segnalare un trackback dal tuo sito. |






