IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

La méthode assertEquals() [JUnit]


Sujet :

Tests et Performance Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Points : 116
    Points
    116
    Par défaut La méthode assertEquals()
    Je ne comprend pas pourquoi, ce test ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Object ref_obj1 = new Object();
    Object ref_obj2 = new Object();
     
    //J'ai essayé 3 solutions:
    assertEquals("The Diplome should be the same",ref_obj1.equals(ref_obj2));
    ou
    assertEquals("The Diplome should be the same",ref_obj1==ref_obj2);
    ou
    assertEquals("The Diplome should be the same",ref_obj1,ref_obj2);
    Aucune des 3 solutions ne fonctionne, je ne comprend pas je pensé que cette méthode vérifié l'égalité de contenu entre 2 objets. Si quelqu'un peut m'expliquer, merci beaucoup.
    Petit à petit, l'oiseau fait son nid !

  2. #2
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Points : 116
    Points
    116
    Par défaut
    J'ai du nouveau, apparemment si j'ai bien compris mes objets doivent surdéfinir la méthode equals() qui par défaut compare des références.
    Seulement je ne vois pas bien comment faire ca.

    Si quelqu'un pouvait me donner un exemple et m'expliquer.
    Petit à petit, l'oiseau fait son nid !

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 67
    Points : 55
    Points
    55
    Par défaut
    En fait je prends par exemple un objet Voiture.
    VOiture à 3 champs, couleur, poids et vitesse.


    Dans la classe voiture tu définis la méthode equals(voiture v1)
    et son code ca va être


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (this.couleur  != v1.couleur) return false;
    else if (this.poids != v1.poids)return false;
    else(this.vitesse != v1.vitesse)return false;
    return true;
    J'espère que ca va t'aider

  4. #4
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Et la javadoc ? Il faut la lire de temps en temps.
    Citation Envoyé par javadoc
    Note that it is generally necessary to override the hashCode method whenever this method (equals(Object obj)) is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    assertEquals("The Diplome should be the same",ref_obj1.equals(ref_obj2));
    Je ne sais pas comment tu fais pour compiler ça, il n'existe pas de méthode assertEquals(String, boolean) (utiliser assertTrue plutôt)


    assertEquals("The Diplome should be the same",ref_obj1==ref_obj2);
    Idem


    assertEquals("The Diplome should be the same",ref_obj1,ref_obj2);
    Ca marche pas parce que par défaut 2 Object sont "equals" s'ils sont une même référence à un objet (comparaison de 2 références). Donc dans les cas d'Objets, assertEquals et assertSame sont équivalents.

    Il faut effectivement surcharger la méthode equals pour modifier ce comportement.

    Petit template pour la classe Toto :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public boolean equals(Object obj)
    {
        if ((obj != null) && (obj instanceof Toto))
        {
            Toto toto = (Toto) obj;
            return (this.field1.equals(toto.field1) &&
                    this.field2.equals(toto.field2) &&
                    this.field3.equals(toto.field3))
        }
        return false;
    }

  6. #6
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Points : 116
    Points
    116
    Par défaut
    Ok, j'ai bien compris le principe, voici la fonction que j'ai saisie(elle ne fonctionne pas bien).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public boolean equals(Object o) {
    	return o instanceof CentreInteret && 
    	this.id == ((CentreInteret)o).id && 
    	this.libelle == ((CentreInteret)o).libelle &&
    	this.content == ((CentreInteret)o).content ;
    	}
    Les 2 premières conditions fonctionnes mais les 2 suivantes(this.libelle == ((CentreInteret)o).libelle &&this.content == ((CentreInteret)o).content renvois false alors quelle possède bien le même contenu. Ce sont des chaines de caractères. Me manque t-il un truc
    Petit à petit, l'oiseau fait son nid !

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par BRAUKRIS
    Ok, j'ai bien compris le principe, voici la fonction que j'ai saisie(elle ne fonctionne pas bien).
    public boolean equals(Object o) {
    return o instanceof CentreInteret &&
    this.id == ((CentreInteret)o).id &&
    this.libelle == ((CentreInteret)o).libelle &&
    this.content == ((CentreInteret)o).content ;
    }
    Les 2 premiéres conditions fonctionnes mais les 2 suivantes(this.libelle == ((CentreInteret)o).libelle &&this.content == ((CentreInteret)o).content renvois false alors quelle posséde bien le même contenu. Ce sont des chaines de caractéres. Me manque t-il un truc
    Si tu veux tester l'egalite sur des objets utilises la méthode equals() et non ==

    [ Modéré par SEMPERE Benjamin ]
    Réponse présente dans la FAQ Java

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  8. #8
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Points : 116
    Points
    116
    Par défaut
    oué ok donc si j'ai bien compris une chaine de caractére est un objet(String) et je doit donc utilisé equals pour la verification.

    Mais il me manque encore un truc : J'ai fais un test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(centreInteret.equals(centreInteret2));
    et la méthode me renvoie bien true(les 2 objets sont identique)
    Mais le code junit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals("The Diplome should be the same",centreInteret == centreInteret2);
    ne fonctionne pas le test m'indique une erreur :
    junit.framework.AssertionFailedError: expected:<The Diplome should be the same> but was:<false>
    ...
    Petit à petit, l'oiseau fait son nid !

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par BRAUKRIS
    Mais le code junit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals("The Diplome should be the same",centreInteret == centreInteret2);
    ne fonctionne pas le test m'indique une erreur :
    junit.framework.AssertionFailedError: expected:<The Diplome should be the same> but was:<false>
    ...
    Ben c est normal, essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    assertEquals(centreInteret, centreInteret2);
    il faut être plus rigoureux

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  10. #10
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 224
    Points : 116
    Points
    116
    Par défaut
    il faut être plus rigoureux Wink

    Et ouais c'est vrai tu as raison en plus
    Bon ba merci bien pour vos remarques constructives et toutes vos réponses, bonne journée.
    Petit à petit, l'oiseau fait son nid !

  11. #11
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals("The Diplome should be the same", centreInteret, centreInteret2);
    En arrière plan, JUnit fera le test centreInteret.equals(centreInteret2). Le message sera affiché en cas d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals("The Diplome should be the same",centreInteret == centreInteret2);
    Ton code compare le résultat de ton test centreInteret == centreInteret2 à la chaine de caractère.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/05/2010, 10h18
  2. Gros Problème avec DirectShow et la méthode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 3
    Dernier message: 10/03/2003, 18h10
  3. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo