Java Unit Testing - JUnit (1)

  • Published on
    03-Jul-2015

  • View
    8.653

  • Download
    5

DESCRIPTION

Java Unit Testing - part 2

Transcript

  • 1. Java Unit Testing JUnit (1)Ing. Fabrizio Gianneschi Java User Group Sardegna Onlus http://www.jugsardegna.org

2. JUnit http://www.junit.org 3. Storia JUnit il pi famoso framework per i test unitari, creato da Kent Beck ed Erich Gamma Risale ormai al 1997 e deriva da un lavoro iniziale di Beck per Smalltalk (SUnit) Il successo stato tale che la stessa filosofia andata oltre la sola versione Java. La famiglia di framework che comprende tutti i diversi porting di JUnit si chiama xUnit. Es: per .NET c' NUnit http://www.xprogramming.com/software.htm 4. Versioni La versione ancora pi usata di JUnit la 3.8.1, che risale al 2002 (!) Vecchia, ma quella che conoscono tutti La versione 4.x invece la pi moderna e sfrutta al massimo le novit che il linguaggio Java ha avuto dal J2SE5.0 in poi. 5. Caratteristiche La bellezza di JUnit sta nella semplicit Pochi concetti, facili da ricordare e applicare E' un framework di base, sul quale oggi poggiano numerosissimi altri HttpUnit StrutsTestCase DbUnit Cactus SwingUnit, J2MEUnit, eccetera, eccetera... 6. Struttura del framework 7. TestCase L'elemento base del framework il TestCase Il programmatore deve scrivere i TestCase. Ognuno di essi una classe che contiene dei metodi di test, scritti dal programmatore La classe deve estendere junit.framework.TestCase La prassi vuole che ci sia un TestCase per ogni classe da testare Esempio: public class TestShoppingCart extends TestCase 8. TestCase Per ogni situazione di test, bene realizzare un metodo di test La prassi prevede la convenzione testXXX() public class TestShoppingCart extends TestCase{ ... public void testClearCart(){...} public void testAddToCart(){...} public void testRemoveFromCart(){...} ... } 9. TestSuite E' bene raggruppare gruppi di TestCase omogenei in TestSuite Due ragioni Eseguendo la suite, JUnit esegue automaticamente tutti i test in essa contenuti Aiuta a mantenere il codice di test pi ordinato 10. TestSuite Quando c' solo un TestCase, JUnit crea dietro le quinte una TestSuite: public static Test suite(){ return new TestSuite(MyTestCase.class); } oppure public static Test suite(){ Metodo di test TestSuite s = new TestSuite(); s.addTest(new MyTestCase(testXyz)); return s; } 11. TestAll Suite di test che prima o poi, tutti creano... public class TestAll extends TestSuite{ public static Test suite(){ TestSuite suite = new TestSuite(Tutto!); suite.addTestSuite(MyTestCase.class); suite.addTestSuite(MyTestSuite1.class); return suite; } public static void main(String args[]){ ... //esegue la suite } 12. Test Sia TestCase che TestSuite implementano l'interfaccia junit.framework.Test public interface Test{ public int countTestCases(); public void run(TestResult result); } 13. Risultati di un test L'esecuzione di un test pu portare tre risultati: Successo (pass) Fallimento (failure) Errore (error) I front end grafici di JUnit mostrano una barra indicante l'esito dei test. La barra verde solo se il 100% dei test ha successo In caso di fallimento, viene lanciata una junit.framework.AssertionFailedError 14. Eseguire i test JUnit dispone di due classi apposite junit.textui.TestRunner (su console) junit.swingui.TestRunner (grafico) Ormai tutti i moderni IDE hanno JUnit integrato tra i propri strumenti 15. Standalone JUnitNetBeans 6.0Eclipse 16. Eseguiamo dei test JUnit dispone di oltre 100 self-test Scaricare JUnit (in genere junit.zip) e scompattarlo in una cartella Aprire un command prompt, posizionarsi nella cartella, ed eseguire: java -cp junit.jar;. junit.textui.TestRunner junit.samples.AllTests oppurejava -cp junit.jar;. junit.swingui.TestRunner 17. Failure and Error Failure E' una condizione normale in JUnit. Vuol dire l'oggetto del test non ha prodotto il risultato atteso, ed il test l'ha rilevato Il TDD taliban contento Error E' una condizione imprevista Qualcosa andato storto nell'oggetto del test oppure nel test stesso (es: la solita, maledetta NullPointerException...) 18. Failure and Error: come comportarsi? Se Failure Rivedo il codice dell'oggetto del test Se Error Pu darsi che debba rivedere anche il test stesso 19. Asserzioni Per controllare il comportamento delle classi oggetto del test, si usano dei metodi speciali della classe TestCase TestCase estende junit.framework.Assert Da non confondere con le assertion introdotte in Java 1.4 Quelle di JUnit sono semplici metodi e hanno senso all'interno del framework Quelle Java hanno valenza a livello generale Non adatte per il testing, ma complementari alle Eccezioni 20. Controllo di uguaglianza AssertEquals Verifica l'uguaglianza di due valori, o due oggetti Se valori, viene effettuato un test == Se oggetti, vengono chiamati i rispettivi equals() assertEquals(2,2); assertEquals(23, Hour.MAX); assertEquals(John, person.getName()); assertEquals(expectedObj, actualObj); 21. Test di nullit AssertNull / AssertNotNull Verificano se un oggetto ha o meno il valore null assertNull(null); //ok assertNull(new Object()); //ko assertNotNull(new Object()); //ok assertNotNull(myObject); //? Esercizio: assertNotNull(5); //che succede? 22. Test booleano AssertFalse / AssertTrue Verificano se una condizione vera o meno. assertTrue(true); //ok assertFalse(true); //ko assertTrue(Hour.MAX == 23); assertTrue(user.isAuthenticated()); 23. Test di riferimento AssertSame Verifica se due oggetti sono gli stessi (cio, se le duereference puntano allo stessa istanza) assertSame(new Object(),new Object()); //koObject obj1 = new Object(); Object obj2 = obj1; assertSame(obj1, obj2); //ok 24. Come scrivere un test 25. semplicissimo! Scegliere la classe da testare (gi realizzata o, se TDD, da realizzare dopo il test) Creare una classe di test che estenda TestCase Per ogni metodo testXXX: Creare o ottenere le istanze della classe da testare Invocare i metodi da testare Fare le dovute asserzioni 26. Esercizio: test della classe String 27. Esempio Requisito: Testare una classe Calcolatrice Calcolatrice in grado effettuare le quattro operazioni fondamentali su primitivi double Scrivere i test per tutte le quattro operazioni In caso di divisione per zero, verificare che Calcolatrice lanci un'eccezione java.lang.ArithmeticException 28. Eseguire il test da command prompt Due metodi, uno manuale ed uno automatico: Utilizzare il TestRunner testuale java -cp junit.jar;. junit.textui.TestRunner MyTest Utilizzare automatismi come Ant 29. Ant Ant un popolare tool Java per l'esecuzione automatica di task Analogo del make in C, ha per il vantaggio di utilizzare l'XML e, grazie a Java, essere multipiattaforma http://ant.apache.org/ 30. Ant e JUnit Ant non solo pu effettuare innumerevoli operazioni su file e risorse, ma pu anche Compilare i sorgenti Java (build) Eseguire i test Controllare l'esito dei test Effettuare commit, deploy... ecc Generare report JUnit perfettamente integrato con Ant 31. Esercizio Creare un progetto Ant da Eclipse Sistemare le librerie necessarie Eseguire build e test con Ant da command line Eseguire build e test con Ant da Eclipse Formattare l'output 32. Licenza Creative Commons (sunto)Attribuzione-Non commerciale-Condividi allo stesso modo3.0 UnportedTu sei libero di modificare, riprodurre, distribuire, comunicare al pubblico, esporre inpubblico, rappresentare, eseguire e recitare quest'opera. Alle seguenti condizioni: Attribuzione. Devi attribuire la paternit dell'opera nei modi indicati dall'autore o da chi ti ha dato l'opera in licenza e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera. Non commerciale. Non puoi usare quest'opera per fini commerciali. Condividi allo stesso modo. Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa. Testo completo della licenza completa su: http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode

Recommended

View more >