J'aimerais écrire quelques tests qui vérifient la configuration XML Spring d'un WAR déployé. Malheureusement, certains beans nécessitent que certaines variables d'environnement ou propriétés système soient définies. Comment puis-je définir une variable d'environnement avant l'initialisation des beans spring lors de l'utilisation du style de test pratique avec @ContextConfiguration?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }
Si je configure le contexte de l'application avec des annotations, je ne vois pas de hook où je peux faire quelque chose avant que le contexte de printemps ne soit initialisé.
java
spring
environment-variables
spring-test
Hans-Peter Störr
la source
la source
@BeforeClass
méthode pour définir la propriété système et une@AfterClass
méthode pour la supprimer fonctionnerait également et se nettoierait bien après elle-même. (Je n'ai pas essayé, cependant.)La bonne façon de faire cela, à partir de Spring 4.1, est d'utiliser une
@TestPropertySource
annotation.Voir @TestPropertySource dans les documents Spring et Javadocs .
la source
@TestPropertySource(properties={"spring.cloud.config.label=feature/branch"})
Environment
propriété, qui est différente d'une "variable d'environnement".On peut également utiliser un test ApplicationContextInitializer pour initialiser une propriété système:
puis configurez-le sur la classe de test en plus des emplacements des fichiers de configuration de contexte Spring:
De cette façon, la duplication de code peut être évitée si une certaine propriété système doit être définie pour tous les tests unitaires.
la source
@SpringBootTest
ou l'une des annotations de découpage de test )Toutes les réponses ici ne parlent actuellement que des propriétés du système qui sont différentes des variables d'environnement qui sont plus complexes à définir, esp. pour les tests. Heureusement, la classe ci-dessous peut être utilisée pour cela et la documentation de la classe a de bons exemples
EnvironmentVariables.html
Un exemple rapide tiré de la documentation, modifié pour fonctionner avec @SpringBootTest
la source
Si vous voulez que vos variables soient valides pour tous les tests, vous pouvez avoir un
application.properties
fichier dans votre répertoire de ressources de test (par défaut:)src/test/resources
qui ressemblera à ceci:Celui-ci sera ensuite chargé et utilisé à moins que vous n'ayez des définitions via
@TestPropertySource
ou une méthode similaire - l'ordre exact dans lequel les propriétés sont chargées peut être trouvé dans le chapitre 24 de la documentation de Spring . Configuration externalisée .la source
Vous pouvez définir les propriétés système comme arguments de machine virtuelle.
Si votre projet est un projet maven, vous pouvez exécuter la commande suivante lors de l'exécution de la classe de test:
Classe de test:
Si vous souhaitez exécuter une classe ou une méthode de test individuelle dans eclipse, alors:
1) Allez dans Exécuter -> Exécuter la configuration
2) Sur le côté gauche, sélectionnez votre classe de test dans la section Junit.
3) procédez comme suit:
la source
Pour les tests unitaires, la variable système n'est pas encore instanciée lorsque je fais "mvn clean install" car aucun serveur n'exécute l'application. Donc, pour définir les propriétés système, je dois le faire dans pom.xml. Ainsi:
la source