Table of Contents
Tests unitaires avec Junit
Il existe énormément de tutoriaux sur l'usage de JUnit sur le Web.
Nous vous proposons ici d'apprendre JUnit en utilisant certaines parties de ces tutoriaux.
Pour les étudiants qui pensent réaliser leur projet ou une partie de leur projet en php, voici quelques tutoriaux avec PHP UNit, mais que nous n'avons pas testé.
Premier test JUnit dans eclipse
- Suivez le tutoriel suivant : http://www.junit.fr/2011/11/20/tutoriel-eclipse-junit-mon-premier-test-automatique/
Pour en savoir plus sur l'environnement JUnit sous eclipse (sur la fin) : http://www.jmdoudoux.fr/java/dejae/chap011.htm
Compléter les tests par la gestion des exceptions
Reprenez l'exemple ci-après pour tester la gestion des exceptions :
- compléter la classe précédente pour lui ajouter la division (vous pouvez/devez renommer la classe);
- créer une autre classe de tests pour tester uniquement la division.
Voir ici : http://rpouiller.developpez.com/tutoriels/java/tests-unitaires-junit4/#LIII-B
Comprendre les annotations
Méthodes
- assertEquals Vérifie que deux objets sont égaux
- assertFalse Vérifie que l'expression est fausse
- assertNotNull Vérifie que l'objet n'est pas nul
- assertNotSame Vérifie que deux références ne sont pas les mêmes
- assertNull Vérifie qu'un objet est nul
- assertSame Vérifie que deux références sont les mêmes
- assertTrue Vérifie que l'expression est vrai
- fail Provoque l'échec du test
Fixture : la mise en place des tests avec setUp et tearDown
D'après Ce tutoriel
Une grande partie du code d'un test unitaire sert établir les conditions d'exécution du dit test. Au sein d'un même TestCase, il peut arriver que toutes les méthodes de test aient besoin d'un minimum de chose (une connexion à une base de données par exemple).
La mise en place de ces conditions est prévue par le framework JUnit. Plutôt que chacun de vos tests appelle une méthode de mise en place, puis une méthode de nettoyage, le framework JUnit lance automatiquement avant un test la méthode setUp, et la méthode tearDown à son issue. Libre à vous d'implémenter ces méthodes si vos tests ont tous besoin des mêmes choses pour fonctionner.
Créer une suite de tests JUnit
Vous allez à présent créer une suite de tests :
Vous pouvez comparer le code généré avec le code que voici : http://rpouiller.developpez.com/tutoriels/java/tests-unitaires-junit4/#LVII
http://www.vogella.com/articles/JUnit/article.html#juniteclipse_testsuite
Tests paramétrés
Les tests paramétrés permettent d'exécuter plusieurs fois un cas de tests avec des valeurs différentes. Le cas de test doit être annoté avec @RunWith avec pour valeur Parameterized. Les paramètres sont indiqués par une méthode annotée avec @Parameters retournant une Collection. Le cas de tests paramétrés doit comporter un constructeur correspondant aux paramètres.
Voici ci-après un exemple de tests paramétrés. Adaptez le à votre exemple.
package math; import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; import org.junit.After; 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 ParametreTests { Calculator op; @Parameters public static List<Object[]> getParametres() { return Arrays.asList(new Object[][] { { 0, 0, 0 }, { 1, 3, 4 }, { 200, 800, 1000 } } ); } int first; int second; int result ; public ParametreTests(int premier, int second, int res) { first = premier; this.second = second; result = res; } @Before public void setUp() throws Exception { op = new Calculator(); } @After public void tearDown() throws Exception { } @Test public void testCalculer() throws Exception { System.out.println(first + "+ " + second +"="+ result); assertEquals(first, second, result); } }
Exécuter les tests JUnit en dehors d'Eclipse
A vous !!
- Créer une première classe relative au projet tutoré par exemple la classe Information. Pensez à utiliser sous Eclipe la génération des accesseurs.
- Associer à votre classe plusieurs méthodes dont par exemple isFrom(String name)
- Définir les tests unitaires qui vont bien.
- Continuez!
A la fin de cette séance
Je sais, j'ai :
- A quoi servent les tests? Quels types de tests existent-ils ?
- Avancé sur le développement du bus et j'ai créé les tests unitaires associés à mes codes;
- Utilisé le gestionnaire de version pour sauvegarder mes codes;