La réutilisation de printemps contexte de l'application à travers les classes de test junit
Nous avons un tas de cas de test JUnit (tests d'Intégration) et ils sont logiquement regroupés en différentes classes de test.
Nous sommes en mesure de charger le Printemps contexte de l'application une fois par classe de test et re-utiliser pour tous les cas de test dans une classe de test JUnit comme mentionné dans http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html
Cependant, nous avons été demandais si il existe un moyen pour charger Printemps contexte de l'application une seule fois pour un tas de test JUnit classes.
FWIW, nous utilisons Printemps 3.0.5, JUnit 4.5 et l'utilisation de Maven pour construire le projet.
- Toutes les réponses ci-dessous sont grands, mais je n'ai pas de context.xml. Ai-je annoté mon chemin dans l'oubli? De toute façon de le faire sans une context.xml?
- u ne trouvé la réponse à votre solution? j'ai le même problème et je veux que ce soit fait avec des annotations et du Printemps de Démarrage.
Vous devez vous connecter pour publier un commentaire.
Oui, c'est parfaitement possible. Tout ce que vous avez à faire est d'utiliser le même
locations
attribut dans vos classes de test:Printemps caches contextes applicatifs par
locations
attribut donc, si le mêmelocations
apparaît pour la deuxième fois, le Printemps utilise le même contexte, plutôt que d'en créer un nouveau.J'ai écrit un article à propos de cette fonctionnalité: Accélérer le Printemps des tests d'intégration. Aussi il est décrit en détails dans le Ressort de la documentation: 9.3.2.1 Contexte de la gestion et de la mise en cache.
Cela a une implication intéressante. Parce que le Printemps ne sais pas quand JUnit est fait, il met en cache tous les contexte jamais et les ferme à l'aide de la JVM de l'arrêt de crochet. Ce comportement (surtout quand vous avez beaucoup de classes de test avec différents
locations
) pourrait conduire à des abus de l'utilisation de la mémoire, des fuites de mémoire, etc. Un autre avantage de la mise en cache contexte.classes
au lieu delocations
comme@ContextConfiguration
annotation de la propriétéclasses =
au lieu delocations =
l'ordre des classes semble à la matière. Assurez-vous que c'est cohérent entre les classes que vous essayez de partager les contextes entre lesÀ ajouter à Tomasz Nurkiewicz réponse, dès le Printemps 3.2.2
@ContextHierarchy
annotation peut être utilisée pour séparer, associée à de multiples contexte de la structure. Ceci est utile lorsque plusieurs classes de test souhaitez partager (par exemple) dans la mémoire de la base de données des configurations (source de données, EntityManagerFactory, texas gestionnaire etc).Par exemple:
En ayant cette configuration le contexte qui l'utilise "test-db-setup-context.xml" seulement sera créé une fois, mais les haricots à l'intérieur, il peut être transmis à l'unité de test du contexte
Plus sur le manuel: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/testing.html#testcontext-ctx-management (de la recherche pour "contexte de la hiérarchie")