User Tools

Site Tools


2017_2018:s3:concprogobjet:td:td1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
2017_2018:s3:concprogobjet:td:td1 [2017/08/11 18:45]
blay [Un projet sous tests (15mn)]
2017_2018:s3:concprogobjet:td:td1 [2017/09/20 10:30]
rl ToDo checked: Complétez la classe de Test à présent et l'exécuter.
Line 116: Line 116:
  
  
-   - Créez un projet **MAVEN** ​+   - Créez un projet **MAVEN** ​( **voir comment faire ici [[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=eclipse#​creer_un_projet_maven|avec eclipse]] [[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=intellij#​creer_un_projet_maven|avec intelliJ]]** ) 
          - Nom du projet : busV1          - Nom du projet : busV1
          - GroupID = fr.unice.iut.info.coo          - GroupID = fr.unice.iut.info.coo
          - ArtefactID = bus          - ArtefactID = bus
-         - ( **voir comment faire ici [[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=eclipse#​creer_un_projet_maven|avec eclipse]] [[https://​mbf-iut.i3s.unice.fr/​doku.php?​id=intellij#​creer_un_projet_maven|avec intelliJ]]** )  
    - La structure contient ​    - La structure contient ​
           - src -> main -> Java ...           - src -> main -> Java ...
Line 181: Line 180:
 ==== Mise en place du programme principal préliminaire (10mn) ==== ==== Mise en place du programme principal préliminaire (10mn) ====
  
-Voici ce que doit faire a minima votre programme principal, pour cela retourner dans le fichier de test et ajouter un cas de test : "​testMonScenario.java" ​et modifier le //​main// ​pour : +Voici ce que doit faire a minima votre programme principal, pour cela retourner dans le fichier de test et ajouter un cas de test : "​testMonScenario.java" ​ ou des tests pour : 
   - créer un bus de nom "​Nice-Circulation",​   - créer un bus de nom "​Nice-Circulation",​
   - créer un message annonçant "une attente de 5mn"   - créer un message annonçant "une attente de 5mn"
   - créer un message annonçant "un accident"​   - créer un message annonçant "un accident"​
-  - lire les messages, +  - récupérer ​les messages ​sur le bus de nom "​Nice-Circulation"​
-  - afficher le contenu des message.+  - afficher le contenu des messages. 
  
 Ce programme ne peut pas tourner puisque quasi rien n'est implémenté,​ par contre vous pouvez vous aider de votre IDE pour qu'au moins il soit "​syntaxiquement"​ juste et créer les bonnes méthodes si elles n'​existent pas déjà, ou les appeler! ​ Ce programme ne peut pas tourner puisque quasi rien n'est implémenté,​ par contre vous pouvez vous aider de votre IDE pour qu'au moins il soit "​syntaxiquement"​ juste et créer les bonnes méthodes si elles n'​existent pas déjà, ou les appeler! ​
Line 196: Line 196:
  
 ==== Un projet sous "​tests"​ (15mn) ==== ==== Un projet sous "​tests"​ (15mn) ====
-Notre objectif est à présent de préparer les tests qui accompagneront notre développement. Pour cela, nous utiliserons l'​environnement JUNIT. La structuration du projet en une partie principale et une partie test est, elle, exigée pour toute la suite de ce module.+Notre objectif est à présent de préparer les tests qui accompagneront notre développement. Pour cela, nous utiliserons l'​environnement JUNIT. ​ 
 +La structuration du projet en une partie principale et une partie test est, elle, exigée pour toute la suite de ce module
 +Vous avez déjà utilisé JUnit l'an dernier, il devrait s'agir uniquement de rappels
  
-    - Ajoutez un nouveau dossier de sources nommé //tests/au même niveau d’arborescence que src +<​accordion ​ collapsed="​true">​ 
-         ​sur le projet, faire un //new source-folder//,​ et l'​appeler //tests// {{ :​2014_2015:​s3:​concprogobjet:​td:​newsourcefolder.png?​direct&​200 |}}  +/* ---------------- 
-    - Dans le menu contextuel de, par exemple la classe //​Message//,​ cliquez sur //New – JUnit Test Case//​((Cette partie du TD reprend en partie le tutoriel JUNIT : http://​www.junit.fr/​2011/​11/​20/​tutoriel-eclipse-junit-mon-premier-test-automatique/​)). {{ :​2014_2015:​s3:​concprogobjet:​td:​junittestcase.png?​direct&​200 |}} Dans le panneau qui s'​affiche {{ :​2014_2015:​s3:​concprogobjet:​td:​messagetest.png?​direct&​200 |}}+*/ 
 +<panel title="​Eclipse" ​ > 
 +    - Dans le menu contextuel de, par exemple la classe //​Message//,​ cliquez sur //New – Others - Java - JUnit Test Case//​((Cette partie du TD reprend en partie le tutoriel JUNIT : http://​www.junit.fr/​2011/​11/​20/​tutoriel-eclipse-junit-mon-premier-test-automatique/​)). {{ :​2014_2015:​s3:​concprogobjet:​td:​junittestcase.png?​direct&​200 |}} Dans le panneau qui s'​affiche {{ :​2014_2015:​s3:​concprogobjet:​td:​messagetest.png?​direct&​200 |}}
           * Sélectionnez le bouton radio //New JUnit 4 test//.           * Sélectionnez le bouton radio //New JUnit 4 test//.
-          * Changez le dossier Source folder pour //tests//.+          * Changez le dossier Source folder pour //bus/​src/​test/​java//.
           * Nommez la classe ''​MessageTest''​.           * Nommez la classe ''​MessageTest''​.
           * Cochez les cases ''​setUp()''​ et ''​tearDown()''​.           * Cochez les cases ''​setUp()''​ et ''​tearDown()''​.
Line 213: Line 217:
 {{ :​2014_2015:​s3:​concprogobjet:​td:​testok.png?​direct&​200 |}} {{ :​2014_2015:​s3:​concprogobjet:​td:​testok.png?​direct&​200 |}}
  
 +</​panel>​
  
  
-/* +<panel title="​IntelliJ" ​ >
-    - Ajoutez un nouveau dossier de sources nommé //tests// au même niveau d’arborescence que src +
-         * sur le projet, faire un //new source-folder//,​ et l'​appeler //tests// {{ :​2014_2015:​s3:​concprogobjet:​td:​newsourcefolder.png?​direct&​200 |}}  +
-*/+
     - Pour créer des tests sur votre classe //​Message//,​ suivez les instructions sous https://​www.jetbrains.com/​help/​idea/​2016.2/​creating-tests.html. La classe de test créée se trouve sous test/​java/​...     - Pour créer des tests sur votre classe //​Message//,​ suivez les instructions sous https://​www.jetbrains.com/​help/​idea/​2016.2/​creating-tests.html. La classe de test créée se trouve sous test/​java/​...
           * Cochez les cases ''​setUp()''​ ((est exécutée avant tout test)) et ''​tearDown()''​ ((est exécutée après tout test)).           * Cochez les cases ''​setUp()''​ ((est exécutée avant tout test)) et ''​tearDown()''​ ((est exécutée après tout test)).
-    -  IntelliJ a maintenant créé automatiquement le squelette de la classe de test. Il ne reste plus alors qu’à remplir cette dernière.  +    -  IntelliJ a maintenant créé automatiquement le squelette de la classe de test. Il ne reste plus alors qu’à remplir cette dernière. 
-    Par exemple +</​panel>​ 
-     ​<code java>+</​accordion>​ 
 + 
 +  
 +   <todo #​rl:​2017-09-20>​ Complétez la classe de Test à présent et l'​exécuter. </​todo>​ Voir un exemple ​de code ci-dessous. 
 +   - <​todo>​ Vérifier la couverture de votre code (menu contextuel, coverage as) si vous êtes sous Eclipse. Vous pouvez aussi les voir sous properties. </​todo>​  
 + 
 +Voici un exemple de code de test. 
 + 
 +<code java>
         protected Message mToTest;         protected Message mToTest;
- protected String ​content;+ protected String ​contents;
  
  @Before  @Before
  public void setUp() throws Exception {  public void setUp() throws Exception {
- content ​= "mon message";​ + contents ​= "mon message";​ 
- mToTest = new Message(content,b);+ mToTest = new Message(contents);
  }  }
  
  @Test  @Test
- public void setContenu() throws Exception {+ public void setContents() throws Exception {
  String nv = "​newValue";​  String nv = "​newValue";​
  mToTest.setContenu("​newValue"​);​  mToTest.setContenu("​newValue"​);​
- assertEquals("​ message contents is as expected",​nv,​mToTest.getContenu()); + assertEquals("​ message contents is as expected",​nv,​mToTest.getContents()); 
- assertFalse("​ message contents has been modified",​ mToTest.getContenu().equals(content));​+ assertFalse("​ message contents has been modified",​ mToTest.getContents().equals(content));​
  }  }
  
-     </​code>​ +</​code>​ 
-    - Dans le menu contextuel, cliquez sur //Run As – JUnit test//. +
-Enfin, le premier rapport de tests s’affiche ! +
  
  
Line 251: Line 260:
  
  
 +Pensez à tester : 
 +  * Retrouver un bus de nom donné
  
  
  
  
 +<​accordion ​ collapsed="​true">​
 +<​panel ​ title="​Pour en savoir plus">​
 ==== Pour aller plus loin ==== ==== Pour aller plus loin ====
  
 Un "bus à messages"​ s'​appuie sur plusieurs design patterns '​Observeur/​Observable"​ et plus précisément "​Publish/​Subscribe"​. Il existe aujourd'​hui de nombreuses implémentations de ces systèmes permettant des communications asynchrones,​ où les consommateurs sont automatiquement notifiés de l'​arrivée de message, où les consommateurs peuvent faire des demandes spécifiques,​ avec des systèmes de filtres complexes, etc.  Un "bus à messages"​ s'​appuie sur plusieurs design patterns '​Observeur/​Observable"​ et plus précisément "​Publish/​Subscribe"​. Il existe aujourd'​hui de nombreuses implémentations de ces systèmes permettant des communications asynchrones,​ où les consommateurs sont automatiquement notifiés de l'​arrivée de message, où les consommateurs peuvent faire des demandes spécifiques,​ avec des systèmes de filtres complexes, etc. 
- +</​panel>​ 
 +</​accordion>​
  
 ===== EVALUATION de CE TD =====  ===== EVALUATION de CE TD ===== 
Line 266: Line 279:
   - Les modèles sont cohérents avec le code.   - Les modèles sont cohérents avec le code.
  
-[[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20160929210709/​BoiteDepot-blay-20160929210839376812?​mode_etudiant=false|Jalon de dépôt pour Mme Fornarino : donner comme nom du dépot : Gr<​NumeroGroupe><​Noms des étudiants>​]]+[[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20160929210709/​BoiteDepot-blay-20160929210839376812?​mode_etudiant=false|Jalon de dépôt pour Mme Blay-Fornarino : donner comme nom du dépot : Gr<​NumeroGroupe><​Noms des étudiants>​]] ​Pour les groupes de Mme Blay-Fornarino date limite 26 septembre minuit
 ===== Je sais ===== ===== Je sais =====
    
Line 276: Line 289:
 </​box>​ </​box>​
  
 +===== Pour les avancés =====
 +
 +
 +[[https://​github.com/​iluwatar/​java-design-patterns/​tree/​master/​producer-consumer/​src/​main/​java/​com/​iluwatar/​producer/​consumer|Des exemples de code Producteur/​Consommateur]]
2017_2018/s3/concprogobjet/td/td1.txt · Last modified: 2017/09/20 10:30 by rl