Valentin Lachand-Pascal

Conception agile de projets informatiques et génie logiciel TP4 Tests

Conception agile de projets informatiques et génie logiciel : TP4 - Tests

Objectif

Création d’un projet de test

Pour vous faire la main, vous allez créer un nouveau projet où vous effectuerez quelques tests. Les fonctionnalités à tester seront des transformations simples de chaînes de caractères. Créez un projet maven simple mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart Répondez à quelques questions, comme quel est le :

Configuration du projet de test

Ce projet créé est simple, mais il faut quand même corriger quelques détails :

package fr.icom.info.m1.tp_test;

public interface ICharManipulator {
  public String invertOrder(String s);
  public String invertCase(String s);
  public String removePattern(String s, String pattern); }

Laissez le corps des méthodes vides (ou avec un “return null;”) pour l’instant, vous les implémenterez après avoir écrit les tests.

Création du premier test

Vous allez maintenant créer votre première classe de test. Soit à la main, soit en vous laissant guider par votre IDE. Vous devez obtenir une classe CharManipulatorTest dans src/test/java (et non src/main/java !) qui :

Pour vérifier que vous avez bien tout fait comme il faut, exécutez mvn test à la racine de votre projet. Il devrait afficher un gros “Build success” en vert, avec un seul “test run”. Pour être vraiment sûrs que votre projet est bien configuré, faites échouer votre test. Rappel : un test Junit échoue lorsqu’une exception non catchée est lancée. Pour faire simple, vous pouvez utiliser la fonction fail(String message); de JUnit 4. Ensuite, ré-effectuez un mvn test, qui cette fois doit échouer.

Création de (vrais) tests

Votre classe de tests va comporter trois parties : une pour chaque fonctionnalité à tester. Par chance, les fonctionnalités que vous voulez tester correspondent aux fonctions de la classe. Chacune des parties comportera plusieurs fonctions de test : une pour chaque cas de figure à tester. En règle générale, on crée une fonction pour l’ensemble des cas “standards”, puis une pour chaque cas particulier que l’on a repéré. Si vous n’êtes pas familier avec JUnit 4 Pour vous aider, JUnit présente, en plus de l’annotation @Test, l’annotation @Before, dont le corps est exécuté avant chaque méthode de test. Elle vous permet, par exemple, d’instancier une variable de type CharManipulator, ce qui vous évite d’avoir à retaper la ligne d’instanciation dans chacun de vos tests. Pour vous aider, JUnit présente également l’annotation @After, que je n’ai encore jamais utilisée à ce jour. NB : faites bien la distinction entre l’annotation @Before, qui est exécutée une fois avant chaque test, et l’annotation @BeforeClass, qui est exécutée une fois avant l’ensemble des tests présents dans cette classe de tests. Pour vous aider, voici à quoi peut ressembler une partie de vos tests sur l’inversion de chaîne :

  // order inversion tests
  @Test
  public void orderNormalStringTest() {
    assertEquals("A",manip.invertOrder("A"));
    assertEquals("DCBA",manip.invertOrder("ABCD"));
    assertEquals("321DCBA",manip.invertOrder("ABCD123"));
  }

  @Test
  public void orderEmptyStringTest()
  {
    assertEquals("", manip.invertOrder(""));
   }

Une fois vos tests codés, vérifiez qu’ils échouent bien, puis attaquez l’implémentation de la fonction invertOrder. Vous pourrez ainsi tester au fur et à mesure du développement et être emplis de joie en voyant le nombre d’échecs diminuer. (Pour de la joie supplémentaire, vous pouvez faire vos tests via votre IDE, vous aurez ainsi une jolie barre qui partira rouge et se colorera de vert à mesure de votre avancée).

Faites ensuite de même pour les deux autres fonctions. Pour préciser :

Lorsque vous aurez au moins 3 fonctions de test pour chaque catégorie, vérifiez que vous n’avez oublié aucun cas particulier, re-vérifiez une dernière fois puis passez à la partie intéressante : l’implémentation des tests pour votre projet.

Tests unitaires du projet

Vous avez probablement beaucoup modifié le projet de base lors du TP de refactoring, donc cette partie va être beaucoup ouverte. Quelques conseils pour vous lancer :

Que doivent faire les tests à minima :