[Paris JUG] Soirée spéciale Tests

Le 11 janvier 2011 a eu lieu le premier JUG de 2011, ayant comme thème: les Tests.
La soirée était animée par David Gageot, auteur du blog Java Bien!.

Lors de nos développements, nous avons tous été confrontés à écrire des tests. Un bon développeur doit écrire des tests fonctionnels et/ou unitaires de façon régulière. Mais s'il y a beaucoup de tests, le build prend plus de temps. Du coup, nous perdons du temps sur la suite du développement.

La question est: Comment faire des tests rapides et efficaces ?

Dans un premier temps, David Gageot a exposé diverses idées pour résoudre ce problème. Les idées sont par exemple:

  • exécuter les tests en parallèle (threads) en utilisant le plugin maven Surefire
  • supprimer le code mort et ne pas oublier de nettoyer les tests
  • supprimer les test redondants
  • tester les règles métiers dans des tests unitaires et de ne pas traverser toutes les couches de l'application. L'idée est de mocker les modules lents

Lors de la deuxième mi-temps, le speaker a présenté ses outils pour le développement des test. Nous retrouvons des plugins et frameworks utilisés avec JUnit.

Plugins :

  • moreUnit : est un plugin Eclipse. Il permet de nous aider dans la création et la gestions de nos tests. Niveau graphique, nous avons une icône vert sur la classe si un test l'est associé. Par exemple, si on renomme une classe, MoreUnit va renommer aussi le test correspondant. Un outil "user friendly" !
  • infinitest : est un plugin Eclipse et IntelliJ. Son principe est de lancer les tests en arrière plan. Lors de chaque sauvegarde du code (après modifications), les tests impactés seront relancés. Du coup, nous pouvons savoir rapidement si le test fonctionne ou pas de façon régulière.

Frameworks :

  • hamcrest : une librairie de matchers. Elle permet de customizer ses assert.
  • fest-assert : est similaire à hamcrest. Elle permet d'écrire ses assert avec une meilleure lisibilité.
    User firstUser= new User();
    User secondUser = new User();
    assertThat(firstUser).isInstanceOf(User.class)
    .isEqualTo(secondUser);

Quelques nouveautés de Junit

  • @Rule: permet d'extraire les règles d'initialisation (@Before) et de fin de test (@After) dans une autre classe. Cette classe étend souvent d'ExternalResource ou implémente MethodRule.
  • @Theory et @DataPoint(s): permet de vérifier des algorithmes avec une combinaison de valeurs. Nous définissons un ensemble de valeurs annoté @DataPoints. Ensuite nous écrivons le test qui va vérifier l'algorithme. D'après le code ci-dessous, nous vérifions si l'addition est commutative:
    @DataPoints
    public static int positiveValues = { 0, 1, 10, 20, 30, 100 };
    @Theory
    public void additionShouldBeCommutative(int value1, int value2) {
    System.out.println(value1 + "/" + value2);
    int result1 = TestedCode.add(value1, value2);
    int result2 = TestedCode.add(value1, value2);
    assertThat(result1).isEqualTo(result2);
    }

    En outre, je pense qu'il faut bien identifier le test en restant rigoureux et utiliser des outils qui permettent de développer des tests robustes, rapides et efficaces.

Un commentaire

  1. Un bon moment de consulter les conférences qui ont eu lieu pendant les TechDays 2013 de Microsoft pour ceux qui n’ont pas la possibilité de s’y rendre.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.