Skip to content
Snippets Groups Projects

Version courte

Pour chacune des classes vue en TD vous devez écrire des tests pour chacune des méthodes et ensuite vous implémenterez ces méthodes. Vous avez un exemple de squelette pour la classe Vector.

Objectif

L'objectif de ce TP est de mettre en place des pratiques de programmation permettant de produire un code correct et lisible. Ce premier TP est assez long à réaliser. Il est impératif de vous concentrer sur votre TP et de travailler entre les TP pour le terminer.

La démarche que vous allez suivre pour implémenter les exercices du TD est la suivante. Vous allez faire dans l'ordre les trois points suivants :

  • Écriture de commentaires pour spécifier précisément le comportement des classes et méthodes.
  • Écriture de tests permettant de vérifier la totalité de la spécification.
  • Écriture du code des méthodes de façon la plus lisible possible.

Vecteur d'entiers

Écriture des tests

Les tests permettent de vérifier à chaque étape du développement que le code écrit est correct, c'est-à-dire, qu'il vérifie les spécifications. Les tests vont être écrits sous la forme de petites méthodes qui vérifient un des comportements attendus.

Faites un clic droit sur la classe Vector et créez un nouveau JUnit Test Case. Sélectionnez New JUnit 4 test, le répertoire src/test/java et nommez la classe VectorTest. Normalement, la nouvelle classe contient un code qui ressemble à celui-ci :

<code>
    public class VectorTest {
    @Test
    public void test() {
    fail("Not yet implemented");
    }
    }
</code>

Placez vous sur la classe et VectorTest et exécutez son contenu à l'aide de la flèche verte d'Eclipse. Normalement, vous devriez voir apparaître le résultat de l'exécution avec un échec rencontré sur la méthode void test(). En effet, la méthode test() est annotée par @Test. Par conséquent, elle est exécutée comme un test par JUnit. La ligne fail("Not yet implemented"); génère l'échec obtenu par l'exécution des tests.

Vous allez écrire des méthodes dans la classe VectorTest afin de tester les différentes fonctionnalités de la classe Vector. Pour cela, vous allez la compléter en vous inspirant des tests déjà écrits.

Implémentation de la classe Vector

Vous pouvez maintenant implémenter la classe Vector en vérifiant à chaque étape de son implémentation que de nouveaux tests passent au vert. N'hésitez pas à utiliser le débogueur d'Eclipse si vous avez des problèmes pour trouver vos erreurs. Évidemment, les erreurs peuvent se trouver dans les tests ou dans le code de la classe Vector. Dans tous les cas, vous ne devez modifier les tests uniquement s'ils sont en désaccords avec les spécifications de la classe.

Pile d'entiers

Effectuez les mêmes étapes que pour l'exercice précédent afin d'ajouter à votre projet la nouvelle classe Stack qui utilise la classe Vector afin d'implémenter une pile. Vous devez donc écrire les spécifications de la classe, écrire une classe de tests, puis implémenter la classe Stack. Cette classe peut être placée dans un package fr.licinfo.structure.

Filtres de chaînes de caractères

Nous allons programmer les classes de l'exercice 3 du TD en utilisant la même démarche de "qualité". Créez un nouveau projet Maven de nom stringfilter, configurez-le afin de pouvoir utiliser JUnit 4 et Hamcrest.

Définissez ensuite l'interface StringFilter et commentez-là. Créez ensuite les différentes classes qui implémentent l'interface StringFilter. Écrivez les commentaires précisant leurs spécifications sans les implémenter.

Ajoutez une classe de tests StringFilterTest. Dans cette classe, ajoutez une méthode testant chacune des implémentations de StringFilter. Par exemple, vous pouvez ajouter la méthode suivante pour tester la classe UpperCaseStringFilter :

@Test
public void upperCaseStringFilter() {
	String input = "toto";
	StringFilter filter = new UpperCaseStringFilter();
	String output = filter.filter(input);
	assertThat(output, equalTo("TOTO"));
}

Implémentez ensuite les différents filtres en vérifiant que votre code est correct à l'aide des tests.

    © 2018 Bertrand Estellon