TP Publish_Question 2

Conception de logiciels Intranet : patrons et canevas

Modérateurs : Douin, graffion

Répondre
slash
Messages : 66
Inscription : 04 nov. 2017 2:45

TP Publish_Question 2

Message par slash » 22 févr. 2018 16:36

Bonjour à tous,

J'ai un test JNews qui ne passe pas pour la question 2 :

testAddReplace(question2): A la suite d'un click sur add, l'affichage semble incorrect !

Code : Tout sélectionner

public void testAddReplace() throws Exception{ 
      try{
        meteoCheck.setSelected(false);
        planifCheck.setSelected(true);
        abortedCheck.setSelected(false);
        this.subscriber.setText("s100");
        this.priority.setText("41");
        this.console.setText("");
        
        assertTrue(planifCheck.isSelected());   
        assertFalse(abortedCheck.isSelected());
        
        this.add.doClick();
        String str = this.console.getText();

        assertTrue(" A la suite d'un click sur add, l'affichage semble incorrect ! ", str.contains("s100(41,F)"));

En question 1 j'avais compris qu'on ne pouvait pas modifier un souscripteur, puisqu'il est indiqué dans l'interface MediatorI pour la méthode add :

Code : Tout sélectionner

@exception si il y a déjà ce souscripteur abonné à ce thème ou un autre
Or en question 2, l'énoncé indique : "au clic sur le bouton « add », le souscripteur est ajouté ou remplacé auprès du médiateur".

De plus, on a la méthode equals de Sub implémentant SubscriberI :

Code : Tout sélectionner

public boolean equals(Object obj){
            Sub s = (Sub) obj;
            return name.equals(s.name);
        }
Dans ces conditions, je ne comprend donc pas pourquoi il serait envisageable de modifier un souscripteur dans la liste avec la méthode add, car cela signifierait qu'on renverrait une exception (c'est le contrat de l'interface) tout en effectuant le remplacement du souscripteur.

J'ai aussi essayé d'afficher la liste non modifiée (j'ai donc bien l'affichage "s100(41,F)" qui est vérifiée par l'assertion), puis l'exception (car l'énoncé nous impose de la relever dans la fenêtre résultante), mais j'ai toujours le même échec à la soumission. Voici mon affichage :

https://ibb.co/f7Mh8H


Comme je n'ai pas connaissance de l'état des souscripteurs présents avant le click sur add, impossible pour moi de savoir si le souscripteur s100 était présent avant le déclenchement de la méthode de test, ni quels étaient ses attributs.

Merci d'avance pour votre aide, je sèche vraiment...

julien_24
Messages : 47
Inscription : 17 oct. 2017 13:41

Re: TP Publish_Question 2

Message par julien_24 » 22 févr. 2018 17:46

Bonjour Slash,

Ce test ne passait pas non plus, j'avais compris la meme chose que toi, et au final, comme dans la question 2 il est possible de modifier un souscripteur, j'ai du modifier la methode de add de la question 1.
Je pense que l'on a pas vraiment le choix, sauf comme tu le dis à faire la modification et levée une exception quand même.

julien.

Douin
Messages : 368
Inscription : 18 mars 2009 15:46

Re: TP Publish_Question 2

Message par Douin » 22 févr. 2018 17:51

Bonjour, relancez votre test,

il se trouve que le serveur jfod/jnews s'exécute depuis une semaine sur mon poste de travail,

et pour les tests unitaires des IHM, j'utilise l'unique souris... souris qui se déplace à mon insu avec les tests...,normalement il ne devrait pas y avoir d'interférences, mais au cas où

Tenez moi informé, si cela fonctionne

Bonne fin de tp

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP Publish_Question 2

Message par slash » 22 févr. 2018 18:02

Bonjour Mr Douin,

J'ai relancé le test, toujours la même erreur.
C'était ma dernière cartouche, donc tant pis.

@Julien
J'allais également tenter la modification dans add(), mais je n'ai plus la possibilité de le faire.
Merci

Douin
Messages : 368
Inscription : 18 mars 2009 15:46

Re: TP Publish_Question 2

Message par Douin » 22 févr. 2018 21:43

Bonsoir, les deux derniers tests, pour cette question sont effacés ... bonne fin de tp

cr2017
Messages : 33
Inscription : 10 oct. 2017 9:05

Re: TP Publish_Question 2

Message par cr2017 » 22 févr. 2018 23:16

Bonsoir, je m'arrache les cheveux également, j'ai ajouté une méthode add2 dans la question 1 qui remplace le subscriber existant comme demandé.

Or j'ai encore un échec:

There were 1 failures:

1) testSendOrderedBroadcastTopicPlanif(question2): A la suite d''un click sur send, l''affichage semble incorrect !


Le détail du test ne m'aide pas car incomplet...
Dernière édition par cr2017 le 22 févr. 2018 23:27, édité 1 fois.

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP Publish_Question 2

Message par slash » 22 févr. 2018 23:27

Bonsoir,

Peux-tu poster quand même le détail des test stp ?

cr2017
Messages : 33
Inscription : 10 oct. 2017 9:05

Re: TP Publish_Question 2

Message par cr2017 » 22 févr. 2018 23:30

Pas de souci:

Code : Tout sélectionner

1) testAddDejaAbonne(question2): A la suite d'un click sur list, l'affichage semble incorrect ! 

        assertFalse(abortedCheck.isSelected());
        
        this.add.doClick();
        String str = this.console.getText();
        assertTrue(" A la suite d'un click sur add, l'affichage semble incorrect ! ", str.contains("s100(41,F)"));
  
        abortedCheck.setSelected(true);
 
        this.console.setText("");
        this.add.doClick();
 
        str = this.console.getText();
        assertTrue("A la suite d'un click sur add(mode replace), l'affichage est incorrect ! ", str.contains("s100(41,T)"));
      }catch(Exception e){
         fail("exception inattendue ! " + e.getClass().getName());
       }
    }
    
       public void testAddDejaAbonne() throws Exception{ 
      try{
        meteoCheck.setSelected(true);
        planifCheck.setSelected(false);
        orderedCheck.setSelected(true);
        this.subscriber.setText("s100"); // s100 déjà présent dans planif
        this.priority.setText("15");
        this.console.setText("");
        this.add.doClick();
        this.console.setText("");
        this.list.doClick();
        String str1 = this.console.getText();
         assertFalse(" A la suite d'un click sur list, l'affichage semble incorrect ! ", str1.contains("s100(15,T)"));
J'ai résolu le premier en rajoutant une vérif dans ma méthode add2 pour s'assurer que le subscriber à remplacer est bien abonné au même topic que celui qui le remplace.

Par contre je n'ai toujours pas résolu le deuxième test, le détail est incomplet donc je ne sais pas pourquoi "s100" ne doit pas apparaître dans les résultats...

Code : Tout sélectionner

2) testSendOrderedBroadcastTopicPlanif(question2): A la suite d'un click sur send, l'affichage semble incorrect ! 

            s250 = s250 || str.contains("s250(250,T)");
            s300 = s300 || str.contains("s300(300,F)");
         }
        assertTrue("A la suite d'un click sur send, l'affichage semble incorrect ! ",s100);
        assertTrue("A la suite d'un click sur send, l'affichage semble incorrect ! ",s200);
        assertTrue("A la suite d'un click sur send, l'affichage semble incorrect ! ",s300);
        assertTrue("A la suite d'un click sur send, l'affichage semble incorrect ! ",s250);
        
     }catch(Exception e){
         fail("exception inattendue ! " + e.getClass().getName());
       }
    }
    
    public void testSendOrderedBroadcastTopicPlanif() throws Exception{ 
      try{
        meteoCheck.setSelected(false);
        planifCheck.setSelected(true);
        orderedCheck.setSelected(true);
        notification.setText("notification;");
        assertTrue(orderedCheck.isSelected());  
        this.send.doClick();
        String[] s = this.console.getText().split(";");
        boolean s100, s200, s250, s300;
        s100 = s200 = s250 = s300 = false;
        for(String str : s){
            s100 = s100 || str.contains("s100");
            s200 = s200 || str.contains("s200");
            s250 = s250 || str.contains("s250(250,T)");
            s300 = s300 || str.contains("s300");
         }
          assertFalse("A la suite d'un click sur send, l'affichage semble incorrect ! ",s100);

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP Publish_Question 2

Message par slash » 23 févr. 2018 0:00

Pour le premier test, je ne comprends toujours pas.
J'ai résolu le premier en rajoutant une vérif dans ma méthode add2 pour s'assurer que le subscriber à remplacer est bien abonné au même topic que celui qui le remplace.
Or l'énoncé indique pour la méthode add() : @exception si il y a déjà ce souscripteur abonné quelque soit le thème
J'en déduit qu'on ne peut pas remplacer de souscripteur ? Ou bien la description de add() ne reflète pas ce qu'on attend, et qu'on doit pouvoir remplacer un souscripteur par un autre de même nom (et apparemment de même topic seulement), mais ça m'étonne. Il y a un truc qui m'échappe...

Pour ton deuxième test, tu as un souscripteur s250 qui arrête la propagation (250 est sa priorité). Donc le souscripteur s100 ne devrait pas être notifié, non ?

julien_24
Messages : 47
Inscription : 17 oct. 2017 13:41

Re: TP Publish_Question 2

Message par julien_24 » 23 févr. 2018 1:07

Bonsoir,

La modification de la méthode add pour répondre a la question2 fait planter un test de la question1 (en local) ce qui semble logique, vu que je lève plus d'exception si il y a une tentative d'ajout sur le meme Topic, mais je remplace (ce qui donne un code assez incohérent, si je trouve le Suscriber qui est egal au Suscriber que je veux ajouter, je le remplace).

Le test qui plante a la question1 (en local) c'est testSubscribersException(), le test essait d'inserer 2 fois le meme Subscriber et donc attend une exception.
La comparaison entre 2 Subscriber se fait sur le nom (classe locale Sub dans la classe de test), je pensais tester les priorités et la variable boolean aborted
pour inserer ou remplacer, mais ca devrait rien changer.

Slash, tu dis peut être voir ou est le problème?

julien

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP Publish_Question 2

Message par slash » 23 févr. 2018 1:25

Je n'ai pas encore soumis mes dernière cartouches (merci Mr Douin d'ailleurs), et je me pose toujours les mêmes questions pour l'histoire du remplacement d'un souscripteur. Je vais tenter un remplacement du souscripteur quand le topic est le même, et exception si topic différent...

Mais pour ton problème dans ton 2ème test, c'est curieux, c'est comme si les souscripteurs de priorité inférieure à 250 (puisque c'est s250 qui arrête la propagation) passaient dans update. Vérifie bien que c'est le cas : dans le sendOrderdBroadcast, tu dois arrêter les update dès que la priorité du souscripteur contrôlé atteint celle de celui (le plus grand) qui a un arrêt de propagation.

julien_24
Messages : 47
Inscription : 17 oct. 2017 13:41

Re: TP Publish_Question 2

Message par julien_24 » 23 févr. 2018 1:33

Re Bonsoir,

J'ai modifié ma méthode add et je teste les priorites et la variable boolean (sur 2 Subscriber au meme nom sur le meme Topic), si une des deux est differentes, je remplace le Subscriber sinon je leve l'exception.

Le test de la question1 qui passait pas repasse.

Les tests jnews passent aussi.

julien

cr2017
Messages : 33
Inscription : 10 oct. 2017 9:05

Re: TP Publish_Question 2

Message par cr2017 » 23 févr. 2018 11:52

Mon modèle est correct, sendOrdererBroadcast quitte la boucle après avoir traité le subscriber dont le boolean abort est à true..

J'ai reproduit le test JNEWS et dans l'IHM, il s'affiche bien uniquement S300 et S250, la propagation s'arrêtant via s250.

J'ai rajouté un console.setText("") au début de la méthode send() dans l'IHM pour bien effacer le contenu de l'affichage avant appel du sendOrderedBroadcast. L'assertFalse sur s100 devrait passer puisque ce dernier n'est pas affiché...

Je me demande s'il ne s'agit pas problème de cache (des fois le submitter n'envoie pas la dernière version du bytecode) j'ai explosé mon compteur malheureusement.

slash
Messages : 66
Inscription : 04 nov. 2017 2:45

Re: TP Publish_Question 2

Message par slash » 23 févr. 2018 15:01

Bonjour,

Merci à tous, les tests sont passés. Il fallait effectivement tout tester dans add (nom, topic, priorité, et arrêt) et envoyer une exception en cas de même nom et topic différent, ou toutes valeurs identiques.

Autre chose par contre, je ne sais pas pour vous, mais la méthode de récupération des exceptions (stringStackTrace) ne me renvoyait rien (isEmpty() est vrai), j'ai dû utiliser la classe StringWriter à la place de ByteArrayOutputStream.

MARIE_JOSEPH
Messages : 3
Inscription : 05 déc. 2017 20:54

Re: TP Publish_Question 2

Message par MARIE_JOSEPH » 27 févr. 2018 19:19

Bonsoir, Mr Douin

j'ai modifié la méthode add
si le souscripteur est déjà enregistré dans la liste
et si il a le même nom et pas le même topic OU si il a même nom, même topic, même priorité et même condition d'arrêt de propagation
lance 1 exception
sinon si même nom et même topic mais pas la même priorité ou si pas la même condition d'arrêt de propagation : le supprime et le rajoute

tout à l'air correct , pourtant j'ai quand même 1 erreurs aux tests de la question 1 et 2.

Q1 : There was 1 failure:
1) testDeadSubscribers(question1): exception inattendue !null

Q2 : There was 1 failure:
1) testSendOrderedBroadcastTopicMeteo(question2): A la suite d''un click sur send, l''affichage semble incorrect !

assertTrue("A la suite d'un click sur send, l'affichage semble incorrect ! ",s7); // en erreur, or en local j'ai bien s7 présent dans la liste ...

je ne comprend pas pourquoi, je ne comprend pas d'où vient l'erreur ? avez vous 1 suggestion ?
serait-il possible que ce soit 1 problème de cache ?

Est t-il possible d'avoir 2 tests supplémentaires pour les 2 questions afin de tenter de finir le TP ?

cordialement Hervé

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité