L3 TP3 Valvassori Moı̈se <[email protected]> L’objectif de ce premier TP est de (re)faire travailler les bases de la compilation Java. 1 Simpliste Ces exercices sont repris de la série 1. 1.1 Préparation 1. Faire un répertoire de travail 2. Préparer le travail sur un brouillon (a) diagrammes UML 1.2 Java 1. Écrire un programme affichant la chaı̂ne (( Bonjour le monde ! ! !)). 2. Écrire un programme1 affichant la factorielle de 1,2,3,4,5,10,20,50,100. Ne pas oublier : – la Javadoc ; – le package 1.3 En Shell 1. compiler ; 2. exécuter ; 3. générer la javadoc ; 4. exécuter de n’importe quel répertoire. 2 Dériveur Dans cet exercice, nous allons réaliser le (fameux) dériveur. 1. Reprendre le dériveur du partiel (voir également la correction du diagramme UML). 2. Reprendre le squelette du dériveur. Ce squelette est généré par un outil UML à partir du modèle proposé au partiel. 3. Compléter le squelette : (a) remplir les méthodes ; (b) corriger les bugs générés par l’outil ; (c) faire la documentation (javadoc) 1 Ce programme peut être qu’une méthode dans le programme (( Bonjour le monde ! ! !)). 3 Tests Unitaires Dans cet exercice, nous allons générer et exécuter automatiquement des jeux de tests. Nous allons utiliser la bibliothèque http://www.junit.org/. Elle est installée sur neon dans ce fichier : /opt/netbeans-5.0/ide6/modules/ext/junit-3.8.1.jar Réaliser un jeu de tests pour le dériveur : 1. tester la construction des différentes expressions ; 2. tester la dérivé des expressions. Ne pas oublier les cas limites. 3.1 Exemple Dans cet exemple, nous allons tester si la dérivé du nombre 1 vaut bien le nombre 0. 3.1.1 Faire un Test Nous créons le jeu test proprement dit. Les tests sont des méthodes dont le nom commence par (( test )). Il peut y avoir plusieurs tests. La méthode setUp est appelée avant chaque test. La méthode tearDown est appelée après chaque test. 1 package l3.mime.java.partiel.deriveur.tests; import junit.framework.TestCase import l3.mime.java.partiel.deriveur.Nombre; 5 public class TestNombre extends TestCase { protected Nombre n; protected Symbole d; protected void setUp() { n = new Nombre(1); d = new Symbole("x"); } 10 public void testDerive() { Nombre derive = n.deriver(d); assertTrue(derive.equals(new Nombre(0))); } 15 } 3.1.2 Construire une suite de tests Un suite de tests est un ensemble de jeu de tests. 1 package l3.mime.java.partiel.deriveur.tests; import junit.framework.TestSuite; import junit.framework.Test; 5 public class DeriveurSuite extends TestSuite { public static Test suite() { TestSuite suite= new TestSuite(); 2 suite.addTest(new TestNombre("test deriver nombre")); return suite; } 10 } 3.1.3 Exécution de la suite de test La ligne de commande pour exécuter le test est : java junit.textui.TestRunner l3.mime.java.partiel.deriveur.tests.TestSuite Avec un interface graphique Swing : java junit.swing.TestRunner l3.mime.java.partiel.deriveur.tests.TestSuite framework Assert +assertTrue(parameter : String, parameter2 : boolean) : void +assertFalse(parameter : String, parameter2 : boolean) : void +fail(parameter : String) : void +fail() : void +assertEquals(parameter : String, parameter2 : double, parameter3 : double) : void +assertNotNull(parameter : String, parameter2 : Object) : void +assertNull(parameter : String, parameter2 : Object) : void +assertSame(parameter : String, parameter2 : Object, parameter3 : Object) : void +assertNotSame(parameter : String, parameter2 : Object, parameter3 : Object) : void -failSame(parameter : String) : void -failNotSame(parameter : String, parameter2 : Object, parameter3 : Object) : void -failNotEquals(parameter : String, parameter2 : Object, parameter3 : Object) : void <<Interface>> Test +run(parameter : TestResult) : void TestCase #setUp() : void #tearDown() : void TestSuite +addTest(parameter : Test) : void +addTestSuite(parameter : Class) : void mesTests MonTest +testQuelqueChose() TousMesTests F IG . 1: Synthèse des classes permettant de construire un jeu de tests. 3 junit runner BaseTestRunner +startTest(parameter : Test) : void +getLoader() : TestSuiteLoader framework TestSuite textui swingui awtui TestRunner TestRunner TestRunner <<import>> load startTest() mesTests MonTest +testQuelqueChose() TousMesTests F IG . 2: Classes exécutant les jeu de tests. 4