Se moquant d'un fichier de Propriétés avec Mockito au Printemps
Je suis en train d'écrire un test unitaire pour la méthode suivante dans mon contrôleur.
@Autowired
private ApplicationContext context;
private String getProperty() {
try {
Properties props = context.getBean("myProperties", Properties.class);
String val = props.getProperty("myProperty");
......
Le Haricot est déclarée comme telle dans mon applicationContext:
<util:properties id="myProperties" scope="prototype" location="file:${catalina.base}/webapps/myProperties.properties"/>
Comment se moquer de ce que je puisse tester différentes valeurs du val variable?
J'ai pensé à la création d'un test de fichier de propriétés et en se moquant comme ceci:
context = Mockito.mock(ApplicationContext.class);
Mocikto.when(context.getBean("myProperties", Properties.class)).thenReturn(some test file)
mais alors je dois déclarer le fichier de test comme un haricot quelque part.
Je me demandais si il y avait un moyen plus facile de faire cela?
Grâce
Êtes-vous à l'aide de Spring MVC? Plutôt que de donner votre contrôleur une référence à l'ApplicationContext et en tirant des valeurs, vous pouvez simplement définir un champ sur votre Contrôleur et de définir une valeur pour elle dans le contrôleur de la fève à la définition. Le test devient un non-problème, parce que vous pouvez initialiser votre contrôleur toutefois que vous voulez dans votre tests - pas besoin de se moquer de l'Application de Contexte.
OriginalL'auteur blong824 | 2011-06-17
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez printemps-3, vous pouvez le faire:
Et dans votre code:
Cela provoque myprops.propriétés disponibles pour les substitutions de variables via ${...} les expressions, et le @de la Valeur de l'annotation permet de la valeur de l'injection de propriétés. Puis dans votre unité de test, vous pouvez simplement définir des valeurs différentes de myProp.
Le printemps conteneur jeter. Je suppose que vous pouvez essayer d'appliquer certains paramètres par défaut si les propriétés ne sont pas trouvés, mais je préfère avoir le conteneur ne pas démarrer. Si la propriété est manquante dans le fichier ou dans le mauvais emplacement ou quelque chose, n'est-ce pas plutôt juste de trouver tout de suite et de le résoudre plutôt que silencieusement tomber en arrière pour certains peut-être pas de bonnes propriétés?
OriginalL'auteur Kevin
Le moyen le plus facile est d'utiliser un org.springframework.les haricots.usine.config.PropertyPlaceholderConfigurer au lieu de tirer les propriétés explicitement à partir du printemps contexte de l'application. Le PropertyPlaceholderConfigurer injecte vos haricots avec les propriétés que vous définissez. Ensuite, vous n'avez pas besoin de Mockito à tous, dans le test, vous définissez la valeur de la propriété dans le Contrôleur de ce que vous voulez qu'il soit.
Afin de vous mettre en place la configurer dans le contexte de l'application xml:
et ajouter un peu de configuration de votre contrôleur (je m'attends il y a un moyen de le faire avec des annotations mais ne le savent pas):
où le contrôleur dispose d'une variable d'instance que vous souhaitez remplir avec de la propriété, avec un setter, comme ceci:
Juste vu un blog sur le Printemps 3.1 améliorations, voici le nouveau xml-moyen gratuit pour faire cela:
OriginalL'auteur Nathan Hughes
Donc je peux tester sans avoir à charger le Printemps Contexte, j'utilise une Config de classe pour accéder à toutes les propriétés de fichier(s) les valeurs de code de programmation. Les avantages sont:
1) Printemps ne se charge pas dans vos tests unitaires
2) Vous pouvez forcer une Exception si la propriété est manquant et qu'il est nécessaire
3) Vous pouvez retourner fortement de la propriété type de valeurs à partir de la lecture() méthodes (c'est à dire convertir une Date)
4) La "clé" des valeurs attendues à partir de vos fichiers de propriétés sont documentés dans une seule classe Java (c'est à dire public static final PROP_XXX)
}
Vous pouvez ensuite l'unité de test de cette classe par la simple injection d'un standard de java.util.Propriétés
OriginalL'auteur Brad