GLG203 TP02 ObjectNotFoundException @ [RESOLU]

Modérateurs : graffion, jmdouin, agoncal, mlebihan

cadart_g
Messages : 27
Inscription : 20 oct. 2015 18:06

GLG203 TP02 ObjectNotFoundException @ [RESOLU]

Message par cadart_g » 20 oct. 2015 23:44

J'ai une erreur dans CategoryDAOTest à la ligne suivante :

Code : Tout sélectionner

at com.yaps.petstore.persistence.DataAccessObject.remove(DataAccessObject.Java: 140)
Cette erreur survient sans surprise lorsque l'id de la catégorie cherchée est nulle.

Si je pars du principe que l'on ne doit pas modifier le code fourni , cela signifie que je ne peux rien faire du côté de la Classe DataAccessObject.

Cependant, dans les tests, c'est bien cette méthode remove qui est directement appelée est qui retourne une erreur ObjectNotFoundException.

Dans ce cas, et sans modifier cette méthode, comment peut ont répondre au cahier des charges qui demande de s'arrêter avant de tenter de supprimer une catégorie qui n'existe pas ?

Merci pour votre précision sur ce point.

Extrait du fichier html ci-après.

Code : Tout sélectionner


testDomainUpdateCategory(V): Votre exécutable a échoué en levant une exception.

Exception levée: com.yaps.petstore.exception.ObjectNotFoundException

Pile d'appel:
com.yaps.petstore.exception.ObjectNotFoundException
at com.yaps.petstore.persistence.DataAccessObject.remove(Unknown Source)
at V.b(Unknown Source)
at V.testDomainUpdateCategory(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at K.tester(Unknown Source)
at K.testerEtQuitter(Unknown Source)
at Tests.main(Unknown Source)

testDomainUpdateCategory(V): null

graffion
Messages : 649
Inscription : 21 juin 2005 14:05

Re: GLG203 TP02 ObjectNotFoundException @

Message par graffion » 21 oct. 2015 10:30

Bonjour,

Remarque préliminaire : le résultat de yaps-test serait plus facile à interpréter que celui de yaps-mark que vous avez donné.

Comme le montre la trace :

Code : Tout sélectionner

testDomainUpdateCategory(V): Votre exécutable a échoué en levant une exception.

Exception levée: com.yaps.petstore.exception.ObjectNotFoundException

Pile d'appel:
com.yaps.petstore.exception.ObjectNotFoundException
at com.yaps.petstore.persistence.DataAccessObject.remove(Unknown Source)
...
votre problème se situe vers la fin de la méthode de test testDomainUpdateCategory :

Code : Tout sélectionner

    public void testDomainUpdateCategory() throws Exception {
        final int id = getUniqueId();

        // Creates an object
        createCategory(id);

        // Ensures that the object exists
        Category category = null;
        try {
            category = findCategory(id);
        } catch (ObjectNotFoundException e) {
            fail("Object has been created it should be found");
        }

        // Checks that it's the right object
        checkCategory(category, id);

        // Updates the object with new values
        updateCategory(category, id + 1);

        // Ensures that the object still exists
        Category categoryUpdated = null;
        try {
            categoryUpdated = findCategory(id);
        } catch (ObjectNotFoundException e) {
            fail("Object should be found");
        }

        // Checks that the object values have been updated
        checkCategory(categoryUpdated, id + 1);

        // Cleans the test environment
        removeCategory(id);

       ...
Cela signifie donc que removeCategory est appelée ici avec un id non trouvé dans le support de persistance.
Pourtant cet id est trouvé un peu plus haut par findCategory (qui n'a pas levé d'exception ObjectNotFoundException)
... c'est donc que l'une des méthodes exécutées par votre CategoryDAO a eu un effet de bord non désiré consistant à enlever l'objet du support de persistance.

Je vous conseillerais de débugger (exécuter pas à pas) cette méthode de test sous Eclipse.

cadart_g
Messages : 27
Inscription : 20 oct. 2015 18:06

Re: GLG203 TP02 ObjectNotFoundException @

Message par cadart_g » 21 oct. 2015 21:06

Merci pour cette guideline utile.

A force d'être le nez sur l'écran, je n'avais pas remarqué que le constructeur Category (String id) n'était pas codé.

C'est pourtant assez utile, pour que la méthode removeCategory(final int id), par exemple, puisse produire un résultat.

... c'est un peu balot. Mais cela m'a fait perdre énormément de temps, car je me suis focalisé sur les fonctions nouvelles, alors qu'en fait, elles fonctionnaient, ... pour peu qu'on les atteigne dans le déroulé des tests unitaires.

Répondre

Qui est en ligne ?

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