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.