Mon EJB 3 déployé, j'ai cherché des outils pratiques pour me permettre de le tester.
L'un d'entre-eux était ejb3Unit, mais il ne soutient pas JUnit 4 (seulement le 3) ce qui me pose des difficultés pour la prévention des timeouts et le rend inéligible.
Quel environnement mettez-vous en place pour tester vos EJB 3?
Un environnement "out of container"? Si oui, lequel? Quelles sont vos expériences?
Lors de vos tests, utilisez-vous la substitution de bases de données que permet souvent l'outil? Utilisez-vous les objets simulacres (mock) pour redéfinir les réponses de vos DAOs ou de vos services?
Je suis face au cas suivant:
(je ne mets pas dedans tout les try-catch qui devraient y figurer pour le code soit compilable. C'est juste une illustration).
Admettons que sur ce service je souhaite faire les tests qui suivent, quel serait le meilleur environnement que vous consitueriez pour faciliter leur réalisation?
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 @Stateless public class MonBean { public void accepterAchat(PersonneId id, Commande c) { IPersonnesDAO daoPersonnes = PersonnesDAOFactory.getInstance(); Personne p = daoPersonnes.find(id); ServiceComptabilité compta = ctx.lookup("LaCompta"); if (compta.clientSolvable(p)) { Grossiste grossiste = ctx.lookup("MonGrossiste"); if (grossiste.possedeArticles(c.listeArticles())) { ICommandesDAO daoCommandes = CommandesDAOFactory.getInstance(); if (daoCommande.exist(c.getId()) == false) daoCommande.insert(c); } } } }
1) Une personne d'un identifiant donné, on la trouve bien.
2) On donnerait une personne bidon (ici par un daoPersonne simulacre) la compta ne se ferait pas avoir et la repèrerait.
3) Quoi qu'ait dit la compta (ici un service Compta simulacre), le grossiste, lui, arrive toujours à fonctionner dans le cadre de ce service là. (bien entendu, il serait plus habile de tester le service grossiste dans ses tests dédiés. Mais là, on veut le tester dans cette situation).
4) Quand tout est bon, on arrive à insérer une commande en base.
etc.
Partager