Comment injecter PersistenceContext pendant le test unitaire?
C'est ma classe java:
public class Finder {
@PersistenceContext(unitName = "abc")
EntityManager em;
public boolean exists(int i) {
return (this.em.find(Employee.class, i) != null);
}
}
C'est l'unité de test:
public class FinderTest {
@Test public void testSimple() {
Finder f = new Finder();
assert(f.exists(1) == true);
}
}
Test échoue avec NullPointerException
depuis Finder.em
n'est pas injecté par n'importe qui. Comment dois-je gérer cette situation? N'est-il de meilleures pratiques existent?
OriginalL'auteur yegor256 | 2010-09-27
Vous devez vous connecter pour publier un commentaire.
Sans un conteneur comme le Printemps (ou quelque chose comme Unitils - ce qui est le Printemps), vous aurez pour injecter de l'entité gestionnaire manuellement. Dans ce cas, vous pourrait utiliser quelque chose comme cela comme classe de base:
OriginalL'auteur Pascal Thivent
Il dépend ce vous souhaitez tester. Lorsque vous avez une logique métier complexe dans votre
Finder
classe vous souhaitez peut-être pour se moquer de laEntityManager
- à l'aide d'un moqueur cadre comme EasyMock ou Mockito - en pour l'unité de test de logique.Maintenant, puisque ce n'est pas le cas, je soupçonne que vous souhaitez tester la persistance de la
Employee
entité (ce qui est souvent désigné comme des tests d'intégration). Cela nécessite l'utilisation d'une base de données. Pour effectuer des tests et facile de garder vos tests de portable vous pouvez utiliser une base de données en mémoire comme HSQLDB à cette fin. Afin de commencer à HSQLDB, créer un contexte de persistance et de les injecter ce contexte, dans votre Finder classe, il est conseillé d'utiliser un Cio cadre comme Printemps.Il y a des tonnes de tutoriels sur internet qui expliquent comment utiliser JPA/Printemps/HSQLDB. Jetez un oeil à cet exemple de projet: Les tests d'intégration avec Maven 2, Spring 2.5, JPA, Hibernate, et HSQLDB
Pas de Printemps peut analyser l' @PersistenceContext annotation et à l'injecter dans votre Finder classe. Vous avez juste à se référer à l'ApplicationContext de la FinderTest.
OriginalL'auteur Richard Kettelerij