[Contourné] checkexeption manquant ?? [Résolu]

Modérateurs : graffion, jmdouin, agoncal, mlebihan

coincoin
Messages : 20
Inscription : 24 oct. 2007 0:19

[Contourné] checkexeption manquant ?? [Résolu]

Message par coincoin » 03 nov. 2007 20:23

Bonsoir,

Dans le ProductDAOTest.java, les méthodes updateProduct et removeProduct ne comportent pas de throw checkException dans leur déclaration.
Sachant qu'on n'a pas le droit de modifier les tests, ça nous oblige à modifier 3 constructeurs (2 dans Category et 1 dans Product), de plus ça oblige ensuite à modifier les DAO qui par défaut catch les exceptions de ces constructeurs.
Pourriez-vous s'il vous plaît mettre à jour le fichier de test ou bien m'expliquer ce que je n'ai pas compris ?

Cordialement,
Frantz.

mlebihan
Messages : 114
Inscription : 09 févr. 2007 1:03

Message par mlebihan » 03 nov. 2007 22:41

J'ai remarqué cela aussi.
Il suffit de les ajouter dans la directive throws de ces deux tests, et tout se passera bien.

M. Le Bihan.

coincoin
Messages : 20
Inscription : 24 oct. 2007 0:19

ah bon ?

Message par coincoin » 04 nov. 2007 0:07

en êtes-vous bien sûr ? on nous a bien dit au départ que la moindre modification des tests pouvait changer le fichier résultat et se transformer en 0.

remit
Messages : 51
Inscription : 13 oct. 2007 17:28

Message par remit » 04 nov. 2007 0:48

Les méthodes updateProduct et removeProduct de la classe ProductDAOTest lèvent une CheckException seulement s'il est fait appel à la méthode checkData dans les constructeurs des classes métier.

A mon avis, ceci doit plutôt être fait dans les D.A.O. ; on peut alors passer les tests sans modifier les classes de test (et en effet, j'ai bien cru comprendre qu'il ne fallait surtout pas les modifier).

mlebihan
Messages : 114
Inscription : 09 févr. 2007 1:03

Message par mlebihan » 04 nov. 2007 3:18

Pour coincoin:
Vous avez raison, mieux vaut ne pas modifier les sources de test, mais dans ce cas là, cela ne va pas poser de problème. C'est juste une solution pour vous débloquer temporairement, d'ici Lundi où le programme correcteur sera sans doute modifié.

C'est une solution de contournement pour ceux qui ont appelé checkData() dans le constructeur de Category, par exemple.


Ici, si une exception CheckException était levée lors de l'exécution de ant-mark alors que le programme correcteur ne s'y attend pas (on a modifié les sources de test pour qu'il l'accepte, mais pas tp03.jar) il lèverait à la place une UndeclaredThrowableException.

coincoin
Messages : 20
Inscription : 24 oct. 2007 0:19

la bonne solution

Message par coincoin » 04 nov. 2007 12:45

bonjour,
mise à part le petit problème de checkexception, quelle est en général la bonne solution ? lever une exception dans le constructeur ou dans les DAO ?
si on ne lève pas d'exception dans le constructeur, on peut alors se retrouver avec un objet inconsistent non ?

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

Message par graffion » 05 nov. 2007 16:12

Ne pas modifier les classes de tests fournies.

La solution attendue ici consiste à ne pas lever d'exception CheckException dans les constructeurs de Product, Item et Category (donc à ne pas appeler la méthodes checkData dans ces constructeurs).

Il est vrai que ce n'est pas cohérent avec le constructeur de Customer qui vous est fourni.

Un essai d'explication (pas complètement satisfaisant!):

- la classe Customer n'a pas de dépendance; son constructeur le plus complet fait donc appel à CheckData qui lève éventuellement CheckException (Noter que les autres constructeurs de Customer ne lèvent pas CheckException).

- les classes Category, Product et Item sont au contraire liées par des relations de composition ; leur checkData est donc plus compliqué car il fait des vérifications sur les objets liés.

Répondre