Je voudrais injecter un objet fantaisie Mockito dans un bean Spring (3+) pour effectuer des tests unitaires avec JUnit. Les dépendances de mon bean sont actuellement injectées à l'aide de la fonction @Autowired
sur les champs membres privés.
J'ai envisagé d'utiliser ReflectionTestUtils.setField
mais l'instance du haricot que je souhaite injecter est en fait un proxy et ne déclare donc pas les champs membres privés de la classe cible. Je ne souhaite pas créer un setter public pour la dépendance car je modifierai alors mon interface uniquement à des fins de test.
J'ai suivi quelques conseils donnée par la communauté Spring mais le mock n'est pas créé et le câblage automatique échoue :
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.Dao" />
</bean>
L'erreur que je rencontre actuellement est la suivante :
...
Caused by: org...NoSuchBeanDefinitionException:
No matching bean of type [com.package.Dao] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {
@org...Autowired(required=true),
@org...Qualifier(value=dao)
}
at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)
at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770)
Si je règle le constructor-arg
à quelque chose d'invalide, aucune erreur ne se produit lors du démarrage du contexte de l'application.
4 votes
Jetez un coup d'œil à cette toute petite créature : bitbucket.org/kubek2k/springockito/wiki/Home
0 votes
C'est une approche très propre - j'aime ça !
2 votes
Tu m'as eu à Springockito-annotations.
0 votes
Oubliez tout le reste,
springockito-annotations
est quelque chose que vous voulez utiliser. Ce qui est bien, c'est que vous pouvez avoir une configuration XML incomplète (omettre les mocks) et les annotations rempliront les blancs (les mocks). Il suffit alors de@Autowire
tout.0 votes
Malheureusement, Springockito ne vous permet pas d'attraper facilement la
WebApplicationContext
(vous pouvez le faire si vous écrivez un test d'intégration avec l'option@WebAppConfiguation
), comme documenté dans ce numéro : bitbucket.org/kubek2k/springockito/issue/12/ Vous devez probablement juste appeler lemock()
méthode vous-même.2 votes
Méfiez-vous bitbucket.org/kubek2k/springockito/issue/37/
2 votes
Pour ceux qui utilisent spring 4.*, à partir de Jan 2015, cela ne semble pas fonctionner avec la dernière version de spring mockito et le projet semble être inactif.
1 votes
@kubek2k : vos liens sont cassés pourriez-vous les mettre à jour ?