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 :

Tests Junit avec exceptions [JUnit]


Sujet :

Tests et Performance Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Par défaut Tests Junit avec exceptions
    Bonjour, je voudrais quelques conseils concernant des tests Junit.

    Je dois tester un constructeur et une méthode toString() (qui a été réécrite). Voici la classe à tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class Identite{
       private String nom;
       private String prenom;
     
       public Identite(String nom, String Prenom) throws MonException{
           if (nom.length()>20) 
              throw new MonException ("Le nom est trop long!");
           this.nom=nom;
           this.prenom=prenom;
       }
     
       public String toString(){
          return ("Le nom : " + nom + " ,le prénom : " + prenom);
       }
    }
    Pour les tests, voici ce que je pense faire, mais je ne sais pas trop quoi faire dans le cas d'une exception... Dois je faire des try and catch et est ce que les assertEquals du constructeurs doivent être dans les try ou en dehors?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class IdentiteTest extends TestCase{
       public void testConstructeur{...}
     
       public void testToString(){
          try{
            Identite monId = new Identite ("Louis","Jacques");
            assertEquals("Le nom :  Louis , le prénom : Jacques",monId.toString());
            }catch (MonException ex){
                System.out.println("Erreur du constructeur");            
            }
    }
    Merci d'avance!

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    A moins que tu ne veuille tester explicitement l'exception dans ton test, le plus facile est de laisser l'exception remonter au delà de ton test. Ainsi JUnit sais que le test est en erreur:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class IdentiteTest extends TestCase{
       public void testConstructeur{...}
     
       public void testToString() throws MonException{
     
            Identite monId = new Identite ("Louis","Jacques");
            assertEquals("Le nom :  Louis , le prénom : Jacques",monId.toString());
     
    }
    Au fait, normalemen, pour toString, tu ne devrais pas avoir de "MonEception", la signature de toString ne mentionnant pas cette exception.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Par défaut
    Merci pour la réponse. En effet le toString() ne procure pas d'exception, mais comme pour tester le toString() je dois créer un objet et que le constructeur procure une exception je dois la traiter dans le test du toString() (ou la laisser passer comme tu disais)... Je me trompe peut-être?

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si l'exception traverse toString(), c'est que c'est qu'elle descend de runtimeException. Tu n'a alors rien à faire de particulier pour qu'elle remonte automatiquement au delà de ton test, vers junit.

    Là où tu pourrais avoir du travail particulier à faire, c'est si tu veux tester que ta méthode envoie bien une exception dans des conditions particulière. Dans ces cas là, j'utilise toujours le schema suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
       unObjet.methodeQuiDoitLancerMachinException();
       fail("Un exception était attendue!");
    } catch (MachinException e){
       // rien à faire, c'est normal.
    }

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Par défaut
    Merci

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Par défaut
    Pour le test d'exception, l'appel à fail est la formule consacrée. Cependant, à force de le faire, on peut oublier de l'appeler. Et là... on ne teste plus rien. Personnellement je préfère définir un helper accessible depuis les tests JUnit. En plus, par la magie de la complétion d'Eclipse & co, il y a moins de code à saisir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public abstract class ExceptionTester extends TestCase {
      public abstract void runTestedAction() throws Throwable;
     
      public ExceptionTester(Class expectedClass) {
        try {
          runTestedAction();
        }
        catch (Throwable t) {
          assertEquals(expectedClass, t.getClass());
          return;
        }
        fail("Expected " + expectedClass + " but got no error");
      }
    }
    Puis, lorsqu'on a besoin de vérifier un lancement d'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void testFailingMethod() {
      new ExceptionTester(Exception.class) {
        @Override
        public void runTestedAction() throws Throwable {
          touchyMethod();
        }
      };
    }
    Bonne continuation,
    Philippe

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

Discussions similaires

  1. Test Junit avec Struts2
    Par sakli dans le forum Struts 1
    Réponses: 1
    Dernier message: 26/09/2011, 17h53
  2. Lancement de tests JUnit avec Build Ant
    Par fedora8 dans le forum ANT
    Réponses: 0
    Dernier message: 22/03/2011, 16h09
  3. tests Junits d'une Action avec DispatchAction
    Par davman_63 dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/01/2008, 15h33
  4. problème avec test Junit
    Par Rayley dans le forum Maven
    Réponses: 6
    Dernier message: 15/11/2006, 16h15

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