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 :

Pointer null sur objet testé


Sujet :

Tests et Performance Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut Pointer null sur objet testé
    Bonjour,

    Voici le test suivant qui fonctionne :
    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
    17
    18
    19
     
    package user;
     
    import junit.framework.TestCase;
     
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
     
    public class UtilisateurTest extends TestCase
    {
     
        @Test public void testUtilisateur()
        {    
            Utilisateur user = new Utilisateur(1, "toto");
            assertEquals(user.getId().intValue() == 1, true);
        }
     
    }
    Voici le même test en utilisant @Before et @After :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    package user;
     
    import junit.framework.TestCase;
     
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
     
    public class UtilisateurTest extends TestCase
    {
        public Utilisateur user;
     
        @BeforeClass public void runBeforeEachTest()
        {
            user = new Utilisateur(1, "toto");
        }
     
        @Test public void testUtilisateur()
        {    
            assertEquals(user.getId().intValue() == 1, true);
        }
     
        @AfterClass public void runAfterEachTest()
        {
            user = null;
        }
     
        /*public static junit.framework.Test suite()
        {
            return new JUnit4TestAdapter(UtilisateurTest.class);
        }
        */
    }
    Et bien l'exécution de celui-ci soulève l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.lang.NullPointerException
        at user.UtilisateurTest.testUtilisateur(UtilisateurTest.java:20)
    ... comme si @BeforeClass et @AfterClass n'étaient pas exécutés.

    Nota : @Before et @After génère le même soucis.

    Pourquoi ?

    Merci.

  2. #2
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut
    Pour information, voici le main de test :

    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
    17
    18
     
    package user;
     
    import junit.framework.Test;
    import junit.framework.TestSuite;
     
    public class AllTests
    {
        public static Test suite()
        {
            TestSuite suite = new TestSuite("Test for user");
            //$JUnit-BEGIN$
            suite.addTestSuite(UtilisateurTest.class);
            //$JUnit-END$
            return suite;
        }
     
    }

  3. #3
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut
    En fait les méthode @Before et @After ne sont pas appelées automatiquement.

    Pourquoi ?

  4. #4
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Parce qu'avant chaque methode et après chaque méthode il faut implémenter les methodes spécifiques et que chaque object entre tes 2 methodes n'est pas "sauvagarder".


    Donc dans ton cas il fait bien le before, mais ensuite il réinitialise tout, fait ton test => donc ca plante vu qu'il a tout réinitiliser :


    Donc ton before doit implementer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected void setUp() throws Exception {
       //la tu met le code qui est dans ton before
    }
    Et ton after :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected void tearDown() throws Exception {
       //la tu met le code qui est dans ton after
    }

  5. #5
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 241
    Par défaut
    Merci maxf1, cela faisait longtemps que tu ne m'avais pas écrit (GAG ).

    Voici donc une classe de test qui fonctionne :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package user;
    
    import junit.framework.TestCase;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class UtilisateurTest extends TestCase
    {
        public Utilisateur user;
        
        @Before public void runBeforeEachTest()
        {
            
        }
    
        @Test public void testUtilisateur()
        {    
            System.out.println("TEST");
            assertEquals(user.getId().intValue() == 1, true);
        }
        
        @After public void runAfterEachTest()
        {
           
        }
        
        protected void setUp() throws Exception {
            System.out.println("BEFORE");
            user = new Utilisateur(2, "toto");
        }
        
        protected void tearDown() throws Exception {
            System.out.println("AFTER");
            user = null;
        }
        
    }
    ... mais à quoi servent donc les 2 méthodes vident (en gras) ?

    A+

  6. #6
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Pour faire une reponse simple : A RIEN.

    Ce sont des methodes qui vont etre executer comme celle la :
    testUtilisateur.


    EN gros il va passer dans l'ordre dans :

    - setUp, puis runBeforeEachTest, puis tearDown
    - setUp, puis testUtilisateur, puis tearDown
    - setUp, puis runAfterEachTest, puis tearDown

    J'espere que tu a compris. C'est toi qui a inventé les méthodes en gras ou tu as vu ca sur un tuto?

Discussions similaires

  1. Les champs de mon objet deviennent null sur GlassFish
    Par JacNar6 dans le forum Glassfish et Payara
    Réponses: 6
    Dernier message: 13/09/2013, 17h13
  2. Réponses: 1
    Dernier message: 12/12/2008, 08h57
  3. Erreur sur un test Null d'un champ Null
    Par RudyWI dans le forum VBA Access
    Réponses: 6
    Dernier message: 20/05/2008, 13h33
  4. [Objet] Test de valeur null
    Par Mister Nono dans le forum Struts 1
    Réponses: 4
    Dernier message: 16/03/2007, 09h03
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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