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
2017_2018:s3:concprogobjet:td:td1 [2017/08/11 18:46]
blay [Un projet sous tests (15mn)]
2017_2018:s3:concprogobjet:td:td1 [2017/09/20 10:30] (current)
rl ToDo unchecked: 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. ​ 
-    - 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 |}}+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.  
 + 
 +<​accordion ​ collapsed="​true">​ 
 +/* ---------------- 
 +*/ 
 +<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 210: 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>​ 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 248: 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 263: 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 273: 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.1502470005.txt.gz · Last modified: 2017/08/11 18:46 by blay