ITI1520 Lab #7 Classes librairies et Testing avec JUnit Daniel Amyot, Diana Inkpen, Alan Williams.

Slides:



Advertisements
Présentations similaires
Le struts validator – framework de validation
Advertisements

SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
J'ADE 2005 J’aide Au Développement des Evaluations Animateurs TICE
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Références à une cellule dans EXCEL
Courbes de fonctions avec Excel
Courbes de fonctions avec Excel
(Classes prédéfinies – API Java)
C.
Le publipostage La fonction de fusion permet de créer des documents identiques dans les grandes lignes que l’on personnalise automatiquement à chaque destinataires.
La fonction Style Permet de créer des types de texte, par exemple
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
12 novembre 2012 Grégory Petit
Prise en main rapide... Ou comment commencer avec RevisAudit ?
Commission scolaire des Laurentides
Principes de programmation (suite)
Cours de programmation
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Base de données relationnelle et requêtes SQL
PROJET DATELIEU 20 MARS 2012LCP SALLE B105 création du site internet avec Weebly.
Mars 2013 Grégory Petit
Créer une animation simple Gif avec ImageReady.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les fonctionnalités : Contacts Windows Présentation de CARNET DADRESSE.
Création d'un diaporama Création d'un diaporama
Guide d'utilisation de Microsoft Weft Il s'agit de convertir un ou des fichiers Police de caractères (font) généralement de type.ttf en un ou des fichiers.eot.
Principes de programmation (suite)
28 novembre 2012 Grégory Petit
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Python La programmation objet
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
FICHIERS : Définition : Algorithme général:
Manipulation de formulaires en Javascript
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Daniel Amyot et Alan Williams
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Les guides de formation WS-FTP Comment télécharger un site web sur le serveur de lÉcole.
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI 1502 Principes fondamentaux de conception de logiciels
ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Références à une cellule dans EXCEL
La librairie assert.h.
Animateur : Med HAIJOUBI
Exporter – Graver - Présenter  C'est grâce aux collections que "Exporter graver présenter" prend tout son sens  On peut y exporter un ensemble d'images,
TP n°3 Javascript Contrôle de formulaire
Annexe 1 Tests unitaires d'applications Java avec JUNIT
JavaScript Nécessaire Web.
JavaScript.
ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Strings et Tableaux en Java
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
1 René Beauchamp Cours # 190 Par Robert Landry SKYPE Téléphonie via Internet.
ITI Lab # 11 Adapté de versions antérieures créées par: Daniel Amyot et Alan Williams.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
ITI1520 Lab #9 - Matrices Adapté de versions antérieures créées par Romelia Plesa, Sylvia Boyd, Alan Williams, Diana Inkpen, Daniel Amyot, Gilbert Arbez,
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
LES CLASSES ET LES OBJETS
Transcription de la présentation:

ITI1520 Lab #7 Classes librairies et Testing avec JUnit Daniel Amyot, Diana Inkpen, Alan Williams

Objectifs Sujets abordés: –Classes librairies –Test avec JUnit –String vs. char[] Dans ce laboratoire, vous allez créer votre propre classe librairie et apprendre comment créer et exécuter des tests pour les méthodes de votre classe.

Une classe “librairie” Créez une classe appelée MaMath qui implémente les méthodes suivantes, mais SANS utiliser la classe Math de l’environnement de développement Java. 1.Une méthode qui retourne la valeur absolue d’un entier x. 2.Une méthode qui calcule x y pour des entier x et y. Utilisez une boucle qui multiplie x par lui- même y fois. Supposez que y ≥ 0 Pas de lecture au clavier ou d’affichage à l’écran!

Algorithme pour valeur absolue DONNÉES:X(un entier) RÉSULTATS:AbsX(la valeur absolue de X) EN-TÊTE:AbsX  Abs( X ) MODULE: X  0 AbsX  – XAbsX  X faux vrai

Algorithme pour puissance DONNÉES:X, Y(deux entiers) RÉSULTATS:XàlaY(valeur de X Y ) INTERMÉDIAIRES:Compteur (compte combien de fois X a été multiplié par lui-même) EN-TÊTE: XàlaY  Pow( X, Y ) MODULE : Compteur ≤ Y XàlaY  XàlaY  X Compteur  Compteur + 1 faux vrai XàlaY  1 Compteur  1

Interagir avec la classe librairie Une fois votre classe compilée avec succès, vous pouvez invoquer ses méthodes à partir d’autres méthodes, incluant la méthode main() d’une autre classe (ou vous pourriez interagir avec l’utilisateur) Il est cependant plus simple d’invoquer les méthodes créées via la fenêtre d’interactions de DrJava. N’oubliez pas de spécifier le nom de la classe auparavant p.e., MaMath.abs(-8) Essayez quelques invocations! Peut se faire avec les classes de Java. Exemple: p.e., Math.random()

Test Nous allons maintenant faire quelques tests pour les méthodes de la classe MaMath. Lorsque l’on teste, il faut: 1.Invoquer la méthode avec des valeurs passées en paramètres. 2.Observer les résultats. 3.Vérifier si les résultats sont ceux attendus. Il faut donc sélectionner des valeurs pour lesquelles vous pourrez déterminer les résultats attendus (par d’autres moyens).

Test manuel Essayez de tester votre classe en exécutant sa méthode et en fournissant des valeurs variées pour x et y. –Sélectionnez vos valeurs avec soin afin de couvrir différents chemins dans le module de l’algorithme. Pour la méthode calculant la valeur absolue: –Essayez pour x des valeurs plus petites que zéro, égale à zéro, et plus grandes que zéro. Pour la méthode calculant la puissance: –Essayez y = 0, y = 1, y > 1 –Essayez x 1 Quels sont les problèmes de cette approche (surtout si vous changes votre code)?

Test avec JUnit Les interactions dans la fenêtre DrJava sont amusantes mais inefficaces lorsque les méthodes à tester sont complexes. Les tests doivent de plus être refaits manuellement à chaque fois qu’on modifie la méthode. JUnit est un ensemble de classes que vous pouvez ajouter à l’environnement de développement Java afin de faciliter et d’automatiser le test. Le nom JUnit vient de “Java unit”. –Le test unitaire (unit testing) consiste à tester des parties d’une application complète (p.e. les méthodes d’une classe librairie) –Pour plus d’informations:

Concepts de base en JUnit Verdict: chaque test peut passer (vert) ou échouer (rouge). Cas de test (test case): une expérience visant à savoir si une méthode produit les bons résultats pour un ensemble donné de valeurs passées en paramètres. –Représenté par une méthode dans une classe de test. –Il peut y avoir autant de méthodes que désirées dans une classe de test. Class de test: contient un ensemble de cas de test pour une classe. –Habituellement, il existe une classe de test correspondant à chaque classe que vous voulez tester.

Création d’une classe de test Assurez-vous d’avoir chargé la classe MaMath dans Dr. Java Dans Dr. Java, dans le menu ‘File’, sélectionnez “Create new JUnit test case…” On vous demandera le nom de la classe de test. Entrez: MaMathTest. –Il est important d’inclure le mot “Test” dans le nom de la classe; c’est de cette façon que JUnit trouve les classes de test (version 3.x). –JUnit version 4 utilise une autre convention Nous utiliserons la version 3. Le résultat devrait être semblable au code de la page suivante.

Classe de test (DrJava) import junit.framework.TestCase; /** * A JUnit test case class. * Every method starting with the word "test" will be called * when running the test with JUnit. */ public class MaMathTest extends TestCase { /** * A test method. * (Replace "X" with a name describing the test. You may * write as many "testSomething" methods in this class as * you wish, and each one will be called when running * JUnit over this class.) */ public void testX() { }

Éléments de la classe test import junit.framework.TestCase; –Nous utiliserons la classe TestCase incluse dans JUnit. On retrouve après le nom de la classe: extends TestCase –Ceci (héritage) indique que la classe va agir comme un cas de test, tel que défini par Junit. Une méthode vide qui retourne un résultat vide (void) et qui n’a pas de paramètres. –JUnit considère cette méthode comme un cas de test. –La méthode devrait être renommée testXXX où XXX est un nom qui indique l’intention (le but) du test.

Création d’une méthode de test Créons un test pour la méthode calculant la valeur absolue. Cette méthode accepte une valeur en paramètre; nous devons fournir une valeur de test pour ce paramètre. –Exemple: si on invoque abs(-4), nous devrions obtenir 4 comme résultat. –Fixons trois valeurs: valeurTestX : le -4 utilisé comme valeur de test. attendue : le résultat attendu, 4 retournée : le résultat retourné par l’invocation de abs(-4).

Vérification du résultat Une partie importante du processus de test consiste à vérifier que le résultat obtenu correspond à ce qui était attendu. Le résultat est un verdict: passe (pass) ou échoue (fail). Avec JUnit, il existe une méthode de la classe Assert appelée Assert.assertEquals( attendue, retournée ) –Si les valeurs attendue et retournée sont égales, alors l’exécution du test continuera. –Si les valeurs ne sont pas égales, alors le cas de test aura échoué à ce point. L’exécution de la méthode de test termine à cet endroit. Si la fin de la méthode de test est atteinte sans aucun échec, alors le test aura passé avec succès.

La méthode assertEquals Il existe quelques versions de la méthode assertEquals afin de comparer plusieurs types de données. –La valeur attendue est toujours le premier paramètre, et la valeur retournée le deuxième: Assert.assertEquals( int, int ) Assert.assertEquals( char, char ) Assert.assertEquals( boolean, boolean ) Assert.assertEquals( String, String ) Assert.assertEquals( double, double, double ) –Pour tester l’égalité de deux nombres réels, il faut fournir un 3e paramètre qui indique la différence maximale acceptée pour que les deux valeurs soient considérées comme “égales” (par exemple ) Rappelez-vous la section 6 des notes qui traite du sujet…

Entrez une méthode de test Remplacez la méthode vide testX avec : public void testAbsNégatif() { // But: teste que abs() fonctionne pour une valeur < 0. int valeurTestX; // Donnée de test pour la méthode invocatrice int attendue; // Valeur attendue comme résultat int retournée; // Valeur retournée par la méthode // Donnée de test pour la méthode valeurTestX = -4; // Résultats attendus et retournés attendue = 4; retournée = MaMath.abs( valeurTestX ); // Vérifie si nous avons obtenu la valeur attendue Assert.assertEquals( attendue, retournée ); }

Un détail de plus… Ajoutez, au haut de votre classe: import junit.framework.Assert; Ceci permettra d’utiliser la méthode assertEquals de la classe JUnit Assert.

Compiler les tests Assurez-vous d’avoir les classes MaMath et MaMathTest chargées dans Dr. Java. Appuyez sur le bouton ‘Compile all’. Après quelques secondes, le bouton ‘Test’ devrait être disponible. –À moins qu’il n’y ait un problème de compilation…

Problème potentiel avec DrJava Si l'installation par défaut ne fonctionne pas avec l'erreur suivante: Error: package junit.framework does not exist il faudra ajouter junit.jar à votre installation Java et indiquer à DrJava où se trouve ce fichier: Copiez (à peu près 120 ko) sur votre ordinateur (p.e. sur le Desktop) Trouvez où se trouve le répertoire lib de votre installation JDK (le mien est à C:\Program Files\Java\jdk1.5.0_09\lib) Déplacez le fichier junit.jar dans ce répertoire lib Démarrez DrJava (suite page suivante)

Problème potentiel avec DrJava Edit > Preferences > Cliquez dans la zone "Extra Classpath" (devrait être sur le premier onglet, sinon sélectionnez "Resource Locations" dans le panneau de gauche) > Cliquez sur Add > ajoutez à la liste le junit.jar situé dans votre répertoire lib Sélectionnez "Apply".

Exécuter les tests Appuyez sur le bouton “Test”. Rapport De test Bouton Test Barre Passe/ Échoue

Résultats de JUnit JUnit montre toujours une barre colorée après l’exécution des tests: –Vert: tous les tests ont passé –Rouge: au moins un test a échoué. –Slogan JUnit : “if the bar is green, the code is clean”! Sinon, l’erreur peut être dans le test ou dans l’application… Les messages d’erreurs sont affichés dans le rapport.

Ajoutons un test qui va échouer Ajoutez une deuxième méthode à votre classe. Cette fois, nous ferons échouer ce test délibérément. –Invoquons abs(4) avec -4 comme valeur attendue (ce qui est incorrect)

Résultat affiché pour un test échoué

Le rapport de test MaMathTest testAbsNégatif testAbsPositif File: C:\...\MaMathTest.java [line: 41] Failure: attendue: but was: Les tests qui ont passé sont affichés en vert, et ceux qui ont échoué en rouge. Pour chaque échec, vous obtenez: –Le numéro de la ligne où l’échec a été observé. –Le résultat de la comparaison Affichés entre au cas où vous auriez des chaînes de caractères avec espaces comme valeurs.

Essayez d’ajouter ces méthodes de test Valeur absolue –Donnée pour test: 0 –Donnée pour test : >= 1 Puissance: –x > 1, x = 1, x = 0, x < 0 –y = 0, y = 1, y > 1, y pair/impair quand x < 0

Si le temps le permet… Ajoutez les méthodes mathématiques suivantes à votre classe MaMath de même que les tests appropriés dans MaMathTest –carré(int n) : retourne le carré de n Faites des tests avec n=40000 et n= Que remarquez- vous? –arrondi(double n) : retourne la valeur entière arrondie de n. Hypothèse: la valeur arrondie de n est représentable par un entier (~ -2 milliards à +2 milliards). Note: Math.floor(x) retourne un nombre réel représentant un entier plus petit ou égal au réel x: –Math.floor(3.6) retourne 3.0 –Math.floor(-3.2) retourne -4.0 Exemples: –MaMath.arrondi(3.9) donne 4 –MaMath.arrondi(3.1) donne 3 –MaMath.arrondi(3.5) donne 4 –MaMath.arrondi(-1.2) donne -1 –MaMath.arrondi(-1.5) donne -1 –MaMath.arrondi(-1.6) donne -2

String vs. char[] Ressemblances: –Tout deux sont des collections de caractères –Tout deux indexés de 0 jusqu’à length - 1 –Tout deux sont des variables de référence Pas de comparaison ==

String vs. char[] Différences: –Accès à un seul caractère: str.charAt(i) vs array[i] –Les caractères d’une chaîne String ne peuvent pas être modifiés facilement après la création de la chaîne. Pas d’équivalent à array[i] = 'x' –Les variables String peuvent se voir assigner des constantes où l’utilisation de new est optionnelle. String str; str = "abc"; str = new String( "def" ); –La plupart des opérations sur les Strings sont faites avec des méthodes. array.length // pas de ( ): attribut et non une invocation str.length( ) //() obligatoire: invocation d’une méthode

Conversions: String  char[] char[] tableau; char[] tableau2; String str;... // Créer un String à partir d’un tableau str = new String( tableau ); // Créer un tableau à partir d’un String tableau2 = str.toCharArray( );

Méthodes usuelles de String Informez-vous sur les méthodes comprises dans la classe String: charAt(…), indexOf(…), length(…) toCharArray(…) equals(…), compareTo(…) concat(…), substring(…), toLowerCase(…), toUpperCase(…) …

Attention! Pour les chaînes de caractères String: –Utilisez le guillemet droit ( " ) –N’utilisez pas: “, ”, « ou » Pour les tableaux de caractères: –Utilisez l’apostrophe droit ( ' ) –N’utilisez pas: ‘ ou ’

Exercices sur les String et char[] Onglet Interactions dans Dr Java –Utilisez des constantes String de votre choix et essayez d’invoquer les fonctions usuelles de la classe String. Par exemple: " ".length() "12345".charAt(4) puis “12345”.indexOf('4') "minuscule".toUpperCase() "A".compareTo("a") (et l’inverse?) "joyeuses".concat(" ").concat("fêtes") String s1="ab"; String s2="ab"; s1.equals(s2) (et s1==s2 ?) String s3="merci"; char[] tabS3= s3.toCharArray(); tabS3[0]

Si le cœur vous en dit… Écrivez une méthode compteMinuscule qui compte le nombre de caractères minuscules dans un objet String. Testez-la dans l’onglet Interaction. (Plus avancé) Écrivez une méthode renverseMinusMajus qui prend un objet String en paramètre et qui change les caractères minuscules en majuscules et réciproquement.