Un petit fond: p>
J'utilise le printemps 2.5, et spécifiquement le printemps IOC et les annotations. P>
J'utilise La situation décrite ci-dessous se posait alors que j'ai essayé de tester mon code. P>
maintenant au problème: p>
Remarque: j'utilise un contexte de printemps différent pour l'environnement de test. P>
J'ai une classe La configuration du ressort du cours échoue automatiquement en raison de plusieurs options pour l'injection de dépendance de la classe code> FOO code> ( Je cherche un moyen d'injecter le grain de test au lieu du haricot d'origine. P>
Je m'attendais à ce que le ressort permettait d'utiliser le fichier de configuration contextuelle pour remplacer une injection de haricot ou pour commander du ressort de ne pas avoir la mise au point de haricot spécifique. P>
mais p>
Toutes ces options semblent exister uniquement pour les haricots définis à l'origine dans le fichier de configuration du contexte de printemps. P> @autowired code> dans mon code (la mise en forme automatique est effectuée par type)
et utilisez @Component code> pour exposer des classes au câblage automatique. P>
foo code> qui est @autowired code> mais dans le contexte de test, je veux utiliser une classe différente du même type simfoo code> (étend foo code>). p>
foo code> et simfoo code> correspondant à la vérification de type). p>
3 Réponses :
Utilisez RéflexionTestutilles Code> Pour définir manuellement la maquette à la place de la dépendance autonome (à cette fin, votre simulacre ne doit pas être géré le printemps, de sorte qu'aucune ambiguïté n'existe) P>
C'est une bonne solution lorsque vous n'avez pas le même instance injecté à plusieurs classes - mais dans un grand projet où une classe agit en tant que fournisseur de services (c'est un singleton) et est injecté à de nombreuses classes, j'espère qu'il y a plus de plus facile / meilleure solution pour éviter d'injecter chaque classe qui utilise l'original
Je sais que cette question est assez ancienne mais une réponse peut encore être utile pour les autres. P>
Puisque vous ne voulez probablement pas mélanger à la fois FOO et MockFoo dans votre contexte, je suggère de supprimer FOO de la numérisation du composant. Cela pourrait être fait par exemple en spécifiant Inclure / exclure les filtres sur le Toutefois, si vous mettez en œuvre des tests d'unités, je préfère suggérer d'utiliser un contexte de printemps et de simplement mettre en œuvre des tests d'unité «pure» en injectant des maquettes des dépendances manuellement, de sorte que vous ne testez qu'une seule classe. Cela peut être réalisé plus facilement en utilisant un cadre moqueur comme Mockito . P>
Je suis d'accord avec Didier. Voici un exemple de la manière dont vous pouvez exclure les implémentations que vous souhaitez vous moquer dans votre contexte d'application de test.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext-test.xml"})
public class MyTest {....}
Bonne réponse, j'irais vraiment avec celui-ci. N'oubliez pas que vous pouvez toujours utiliser @qualifier (Nom = "Onesbean") sur votre objectif injecté et @Resource (Nom = "Onesbean") sur le terrain où vous voulez que l'instance de haricot spécifique soit injectée.