Plan. JUnit. 2. Classe de tests. 1. Introduction. 1. Introduction 2. Classes de test 3. Asserts 4. Suite de tests 5. Initialisations 6.

Documents pareils
Environnements de développement (intégrés)

Programmer en JAVA. par Tama

Auto-évaluation Programmation en Java

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Plan. Tests. 1. Introduction. 1. Introduction

TP1 : Initiation à Java et Eclipse

Programmation Par Objets

LOG4430 : Architecture logicielle et conception avancée

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Corrigé des exercices sur les références

TD/TP PAC - Programmation n 3

Une introduction à la technologie EJB (2/3)

RMI le langage Java XII-1 JMF

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Package Java.util Classe générique

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Développement Logiciel

Java et les annotations

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Introduction au langage Java

Remote Method Invocation (RMI)

Un ordonnanceur stupide

Chapitre 10. Les interfaces Comparable et Comparator 1

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Java Licence Professionnelle CISII,

Introduction à JDBC. Accès aux bases de données en Java

INITIATION AU LANGAGE JAVA

Création d une application JEE

Création d objet imbriqué sous PowerShell.

Héritage presque multiple en Java (1/2)

Spring par la pratique

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

TD/TP PAC - Programmation n 3

Synchro et Threads Java TM

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Premiers Pas en Programmation Objet : les Classes et les Objets

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java Aspect Components (JAC)

Programmation Objet Java Correction

Cours 1: Java et les objets

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

as Architecture des Systèmes d Information

Architecture Orientée Service, JSON et API REST

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Objets et Programmation. origine des langages orientés-objet

7 Développement d une application de MapReduce

Design patterns. Design patterns - définition. Design patterns - avantages

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Travaux Pratiques : Lucène - Gestion d un index plein texte

Dis papa, c est quoi un bus logiciel réparti?

Création d un service web avec NetBeans 5.5 et SJAS 9

Applet pour visualiser les variables «automate» notifiées

LOG4430 : Architecture logicielle et conception avancée

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Programmation par les Objets en Java

Programme Compte bancaire (code)

Une introduction à Java

Langage Java. Classe de première SI

Arbres binaires de recherche

Corrigés des premiers exercices sur les classes

Remote Method Invocation Les classes implémentant Serializable

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Chapitre VI- La validation de la composition.

Projet de programmation (IK3) : TP n 1 Correction

Application web de gestion de comptes en banques

Tutoriel d installation de Hibernate avec Eclipse

Cours 14 Les fichiers

Calcul Parallèle. Cours 5 - JAVA RMI

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Exercices INF5171 : série #3 (Automne 2012)

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Certificat Big Data - Master MAthématiques

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

Java 1.5 : principales nouveautés

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmation par composants (1/3) Programmation par composants (2/3)

Programmation avec des objets : Cours 7. Menu du jour

Remote Method Invocation en Java (RMI)

Tp 1 correction. Structures de données (IF2)

Généralités sur le Langage Java et éléments syntaxiques.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TP Programmation Java / JDBC / Oracle

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Interfaces graphiques avec l API Swing

La base de données XML exist. A. Belaïd

Threads. Threads. USTL routier 1

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Transcription:

Plan JUnit Lionel Seinturier Université des Sciences et Technologies de Lille Lionel.Seinturier@lifl.fr 1. Introduction 2. Classes de test 28/11/06 JUnit 1 Lionel Seinturier JUnit 2 Lionel Seinturier JUnit 1. Introduction Règles d'écriture Framework de test pour des programmes Java ensemble de librairies pour exécuter des méthodes de test fournit méthodes assert pour vérifier le résultat de code à tester public class Largest { http://www.junit.org hérite de junit.framework.testcase contient méthodes de test méthodes publiques avec un nom commençant par test public class TestLargest extends TestCase { public void testorder() { assertequals(9, Largest.largest(new int[]{7,8,9); public static int largest(int[] list) { int index, max=0; for (index = 0; index < list.length; index++) { if (list[index] > max) max = list[index]; return max; Lancement du test ligne de commande GUI Swing plug-in Eclipse, : java junit.textui.testrunner TestLargest : java junit.swingui.testrunner JUnit 3 Lionel Seinturier JUnit 4 Lionel Seinturier

Que teste-t-on? ne dépend pas de l'ordre des éléments ok en cas de répétition ok en cas de liste avec un seul élément ok en cas de liste vide ok en cas de valeur négative public class TestLargest extends TestCase { public void testorder(){ assertequals(9,largest.largest(new int[]{7,8,9); p v testorder2(){assertequals(9,largest.largest(new int[]{6,9,7,8); p v testdup() { assertequals(9,largest.largest(new int[]{9,7,8,9); p v testone() { assertequals(7,largest.largest(new int[]{7); p v testempty() { assertequals(0,largest.largest(new int[]{); p v void testnegativevalue() { assertequals(-8, Largest.largest(new int[]{-6,-7,-8); Remarque testempty : est-ce que c'est bien ce que l'on veut? amène un questionnement/précision sur les spécifications testnegative There was 1 failure: 1) testnegative(testlargest)junit.framework.assertionfailederror: expected:<-8> but was:<0> at TestLargest.testNegative(TestLargest.java:13) bug!! max = Integer.MIN_VALUE testempty? JUnit 5 Lionel Seinturier JUnit 6 Lionel Seinturier Méthodes fournies par JUnit Remarque si list est null? NullPointerException static int largest(int[] list) throws IllegalArgumentException { if( list == null ) throw new IllegalArgumentException("list shouldn't be null);... void testnull() { try { Largest.largest(null); fail("illegalargumentexception should have been thrown"); catch( IllegalArgumentException iae ) { JUnit 7 Lionel Seinturier assertequals( [ String message, ] expected, actual ) expected, actual int, float, double, boolean, Object : la méthode equals appelée pour tester l'égalité message : facultatif (si absent message par défaut de JUnit) assertnull( [ String message, ] Object object ) assertsame( [ String message, ] expected, actual ) asserttrue( [ String message, ] boolean condition ) assertfalse( [ String message, ] boolean condition ) fail( [ String message ] ) conduit à l'échec du test JUnit 8 Lionel Seinturier

Méthodes fournies par JUnit assertequals( [ String message, ] expected, actual, delta ) pour les types float et double retourne vrai si actual [expected-delta, expected+delta ] exemple : assertequals( 3.33, 10.0/3.0, 0.01 ); Tests exécutés par JUnit Par défaut JUnit exécute dans une classe de test toutes les méthodes public dont le nom commence par test Possibilité de restreintre la liste des tests Tableaux : assertequals égalité de référence (pas de contenu) public void assertarrayequals( Object[] a1, Object[] a2 ) { assertequals(a1.length, a2.length); for( int i=0 ; i<a1.length ; i++ ) assertequals(a1[i], a2[i]); assertarrayequals(new Object[]{4,5, new Object[]{4,7); import ju.f.test; import ju.f.testcase; import ju.f.testsuite; public class TestSimple extends TestCase { public void test1() { asserttrue(true); public void test2() { asserttrue(true); public static Test suite() { TestSuite suite = new TestSuite(); suite.addtest( new Simple("test1") ); return suite; public Simple( String methodname ) { super(methodname); JUnit 9 Lionel Seinturier JUnit 10 Lionel Seinturier Tests exécutés par JUnit Notion de suite de tests (TestSuite) ensemble de tests exécutés en séquence ajout d'un test : addtest(test) ajout des tests d'une autre suite : addtestsuite(class) public class TestComposite extends TestCase { public static Test suite() { TestSuite suite = new TestSuite(); suite.addtest( new Simple("test2") ); suite.addtestsuite( TestSimple.class ); suite.addtest( TestSimple.suite() ); return suite; Initialisation des tests chaque méthode de test est exécutée indépendamment des autres besoin : initialisation avant d'exécuter le test méthode setup() exécutée avant chaque méthode de test méthode teardown() exécutée après chaque méthode de test public class TestDB extends TestCase { private Connection cx; protected void setup() { cx = new Connection( "mysql", "localhost", "9001", "bob, ""); cx.connect(); protected void teardown() { cx.disconnect(); cx = null; public void test1() {... /*utilise cx*/... public void test2() {... /*utilise cx*/... JUnit 11 Lionel Seinturier JUnit 12 Lionel Seinturier

Initialisation des tests JUnit 4 initialisation globale pour toutes les méthodes de tests méthode static void onetimesetup() onetimesetup() setup() test1() teardown() setup() test2() teardown() onetimeteardown() mise à jour pour Java 5 modèle d'écriture de tests à l'aide d'annotations fonctionnalités identiques nouvelles fonctionnalités test paramétré test à délai d'exécution borné package org.junit (à la place de junit.framework) pas nécessaire étendre TestCase pas nécessaire de préfixer les méthodes de test par test annotation méthodes static assert... définies dans la classe org.junit.assert méthode static fail définie dans la classe org.junit.assert JUnit 13 Lionel Seinturier JUnit 14 Lionel Seinturier Initialisations import org.junit.test; import static org.junit.assert.assertequals; public class TestLargest { public void order(){ assertequals(9,largest.largest(new int[]{7,8,9); p v order2(){assertequals(9,largest.largest(new int[]{6,9,7,8); p v dup() { assertequals(9,largest.largest(new int[]{9,7,8,9); p v one() { assertequals(7,largest.largest(new int[]{7); p v empty() { assertequals(0,largest.largest(new int[]{); méthode setup() méthode annoté avec @Before méthode teardown() méthode annoté avec @After méthode onetimesetup() méthode annoté avec @BeforeClass méthode onetimeteardown() méthode annoté avec @AfterClass Lancement des tests java org.junit.runner.junitcore TestLargest JUnit 15 Lionel Seinturier JUnit 16 Lionel Seinturier

Test paramétré Test paramétré Pouvoir réutiliser une méthode de test avec des jeux de données @Parameters annote une méthode qui retourne une Collection de tableaux à 2 éléments 1er élément : une donnée 2ème élément : le résultat attendu du test avec la donnée précédente @RunWith(Parameterized.class) annote une classe qui contient des méthodes de test devant être exécutées avec le jeu de données Principe pour chaque couple ( donnée, résultat attendu ) la classe est instanciée les méthodes de test exécutées import static org.junit.assert.assertequals; import java.util.arrays; import java.util.collection; import org.junit.before; import org.junit.test; import org.junit.runner.runwith; import org.junit.runners.parameterized; import org.junit.runners.parameterized.parameters; @RunWith(Parameterized.class) public class Simple { private int value; private int expected; private Calc c = new Calc(); public class Calc { public int square( int x ) { return x*x; JUnit 17 Lionel Seinturier JUnit 18 Lionel Seinturier Test paramétré Autres nouvelles fonctionnalités @Parameters public static Collection<Object[]> data() { return Arrays.asList( new Object[][]{ {1,1, {2,4, {3,8 ); public Simple( int value, int expected) { this.value = value; this.expected = expected; public void t1() { int result = c.square(value); assertequals(expected,result); JUnit 19 Lionel Seinturier Test à délai d'exécution borné pouvoir définir un temps max pour l'exécution d'un test (timeout=5000) long (délai en ms) Test devant se terminer par une exception (expected=une_classe_d_exception.class) (expexted=myexcept.class) public t() {... public t() { try {...; fail(); catch( MyExcept e ) JUnit 20 Lionel Seinturier