Structurez votre code avec des fonctions et du TDD
Thèse : Structurez votre code avec des fonctions et du TDD. Recherche parmi 300 000+ dissertationsPar valentin_le_pare • 4 Février 2019 • Thèse • 1 459 Mots (6 Pages) • 514 Vues
- Aller au contenu
- Choisir la langue
- Aller à la recherche
- Parcours
- Cours
- Premium
- For Business
Valentin Girard
- Accueil >
- Cours >
- Démarrez votre projet avec Java >
- Structurez votre code avec des fonctions et du TDD
Démarrez votre projet avec Java
- [pic 1]15 heures
- Facile
Licence
Mis à jour le 28/01/2019
Structurez votre code avec des fonctions et du TDD
Pour télécharger les vidéos de ce cours, devenez Premium
Pour l'instant les rôles ne sont pas bien organisés dans nos classes. La classe Main ne doit servir qu'à exécuter le lancement. Tout ce qui est relatif aux commandes doit se trouver dans la classe Order . Or, ici, c'est la classe Main qui récupère la saisie de la commande de notre utilisateur.
C'est un mauvais découpage, si un développeur reprend notre code, il aura du mal à comprendre ce que nous avons voulu faire.
Nous allons créer dans la classe Order une nouvelle fonction nommée runMenu.
/**
* Run asking process for a menu.
*/
public void runMenu() {
}
C'est elle qui va se charger de récupérer la saisie utilisateur à la place de la fonction main.
Pour récupérer une version propre du projet prêt pour ce chapitre vous pouvez importer le projet git suivant : MyMenu - Step 3
Le TDD
Le Test Driven Development est une pratique de développement qui améliore beaucoup la qualité de votre code. En pensant aux tests d'une fonction avant de coder celle-ci on s'assure de penser à tous les cas et surtout d'avoir des tests de grande qualité.
Les tests sont surtout utilisés quand un autre développeur reprend votre travail. Il pourra modifier votre code et lancer les tests pour s'assurer qu'il n'a pas fait d'erreurs. Si les tests couvrent tous les scénarios possibles, il y aura forcément un test en rouge en cas d'erreur.
Le TDD consiste à :
- Rédiger en amont les tests pour votre code, en veillant à tester chaque scénario.
- Exécuter ces tests et vérifier qu'aucun ne fonctionne.
- Écrire le code de la fonction concernée.
- Exécuter à nouveau les tests jusqu'à ce que ceux-ci fonctionnent.
Pour cette-fois, j'ai rédigé pour vous le test de runMenu . Ne vous y habituez pas, bientôt ce sera à vous de le faire. Copiez le test suivant dans la classe OrderTest sans vous soucier de le comprendre pour l'instant. Il vérifie le bon fonctionnement du programme.
@Test
public void Given_ChikenInStandardInput_When_MenuIsRun_Then_DisplayCorrectProcess() {
System.setIn(new ByteArrayInputStream("1\n".getBytes()));
order = new Order();
order.runMenu();
String output = outContent.toString().replace("\r\n", "\n");
assertEquals(output.endsWith("Vous avez choisi comme menu : poulet\n"), true);
assertEquals(output.length() > "Vous avez choisi comme menu : poulet\n".length(), true);
}
Si elle ne s'ajoute pas automatiquement, pensez à ajouter la ligne
import java.io.ByteArrayInputStream; en haut du fichier OrderTest .
Exécutez-le : le test est rouge ! Il va falloir écrire le code de notre fonction pour qu'il passe au vert.
Pourquoi exécuter les tests pour qu'ils passent au rouge ? On sait déjà que le test ne va pas fonctionner !
C'est pour être certain que votre test vérifie quelque chose. Si le test passe au vertdès maintenant, c'est que votre test n'est pas bon.
Les tests sont à eux seuls un vaste sujet qu'il faut longtemps pratiquer pour bien maîtriser. Quand vous serez un peu plus à l'aise avec Java, je vous invite à lire le cours consacré aux tests, pour aller plus loin avec ce sujet.
Notre nouvelle fonction
Étudions maintenant chaque ligne du code de la fonction main contenue dans notre classe Main. C'est ce code qu'il va falloir déplacer dans la fonction dans runMenu .
public static void main(String[] args) {
Order order = new Order();
order.displayAvailableMenu();
Scanner sc = new Scanner(System.in);
int nb = sc.nextInt();
order.displaySelectedMenu(nb);
}
Que remarque-t-on avec la première ligne ?
Order order = new Order();
On utilise le mot-clé new , donc notre Order est une variable de type objet ! Vous comprenez maintenant ce qu'est une variable de type objet : un fichier renfermant différentes fonctions. D'ailleurs avec les types objets on parle de méthodes et pas de fonctions.
...