Comment utiliser JUnit avec EJB3 et JPA
Je suis en train de tester mes Beans de Session avec JUnit, mais je ne peux pas. J'en ai essayé beaucoup de méthode, mais toujours quelques exceptions.
Voici ce que j'ai besoin de:
- J'ai un peu de Beans de Session sans état j'ai besoin de tester. Chacun a le même
@PersistenceContext
et utilise unEntityManager
- Avec mon cas de test j'ai besoin de tester leurs méthodes. Par exemple: si j'ajoute un utilisateur avec le nom d'utilisateur X et puis j'essaie d'ajouter un autre avec le même nom d'utilisateur, je veux attraper une Exception.
Quelqu'un peut-il fournir un moyen simple et générique court exemple de test? J'ai déjà lu beaucoup, mais je reçois toujours un message d'erreur (je reçois NullPointerException
pour la EntityManager
lorsque j'appelle une méthode comme: sessionBean.method()
(qui, par exemple, entityManager.find(...)
), ou je ne suis pas capable d'initialiser le Context
, ou d'autres PersistenceException
).
- Comment écrivez-vous vos cas de test? Utilisez-vous certains cadre d'intégration comme Arquillian ou incorporé conteneur d'EJB comme OpenEJB?
- J'ai essayé les deux (à l'aide de mockito en tant que cadre). Je ne sais pas comment les définir, ce que j'ai besoin d'importer... La méthode est très bien, de toute façon.
- J'ai un exemple simple : stackoverflow.com/questions/6469751/testing-an-ejb-with-junit/... . Regarde ma réponse.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez être intéressé par l'un des derniers messages de Antonio Goncalves:
WYTIWYR : Ce que Vous Testez Est Ce que Vous Exécutez
Il dit sur le test des EJB avec l'EntityManager à l'aide de:
@DataSourceDefinition
). Cependant, j'utilise le@PersistenceContext
avec lepersistence.xml
descripteur. Donc, je ne sais pas comment l'adapter son exemple pour mon cas.J'ai résolu de la création d'un
Stateless Session Bean
et injecter sonEntity Manager
de classes de test. Je poste le code au cas où quelqu'un a besoin d'elle:Alors je peux utiliser
proxy.find()
pour obtenir les entités dont j'ai besoin, oproxy.getEntityList()
pour exécuter une requête pour récupérer toutes les instance de l'Entité. Ou je peux ajouter d'autres méthodes si je veux.Unitils fournit un vraiment cool de soutien de JPA. Unitils peut être utilisé avec JUnit ou TestNG et dans le cas où vous avez besoin d'un moqueur cadre, Unitils met elle-même en se moquant de module ainsi que le soutien pour EasyMock.
@JpaEntityManagerFactory - Utilisé pour spécifier votre unité de persistance. Il prend automatiquement la persistence.xml à partir de votre projet de chemin de classe.
@DataSet - Juste au cas où vous avez besoin pour charger les données de test, vous pouvez utiliser cette.
@TestedObject les Marques de votre Classe de Test
@PersistenceContext - crée Automatiquement votre EntityManager instance de la configuration faite dans le persistence.xml - PersistenceUnit.
@InjectInto - Injecte de l'em instance dans la cible (cut)
Pour plus d'informations, reportez-vous cette.
Espère que cette aide.
Je suis en utilisant Aiguille pour cela. Il fonctionne bien avec Mockito et EasyMock si vous voulez ridiculiser d'autres objets.
J'ai d'abord écrire un persistencte.xml pour les tests (src/test/resources/META-INF) comme ceci:
Dans mon Junit-Testclass j'écris:
Vous avez également besoin d'une Aiguille-le Fichier de configuration dans src/test/resources, où vous dites ce genre de Maquette fournisseur que vous utilisez. E. g. Je suis l'aide de Mockito:
Que c'est.