2010-05-07 4 views
1

J'ai un bean qui a un couple de beans injecté avec l'annotation autowire (pas de qualificatif). Maintenant, pour des raisons de test, je veux injecter quelques mocks au bean au lieu de ceux qui sont autowired (certains DAO). Est-il possible de changer quel bean est injecté sans modifier mon haricot? Je n'aime pas l'idée d'ajouter des annotations à mon code juste pour le tester et ensuite le supprimer pour la production. J'utilise le printemps 2.5.injecter une maquette dans un bean ayant des annotations @Autowired

Le look de haricots comme ceci:

@Transactional 
@Service("validaBusinesService") 
public class ValidaBusinesServiceImpl implements ValidaBusinesService { 

    @Autowired 
    OperationDAO operationDAO; 
    @Autowired 
    BinDAO binDAO; 
    @Autowired 
    CardDAO cardDAO; 
    @Autowired 
    UserDAO userDAO; 

    ... 
    ... 
} 
+1

chaque fois qu'une réponse vous convient, vous êtes censé la marquer comme acceptée (cochez ci-dessous le compteur de votes) – Bozho

Répondre

1

Utilisez ReflectionTestUtils pour définir une implémentation différente manuellement dans vos tests unitaires.

Il s'agit en fait de l'une des puissances de l'injection de dépendance - peu importe à la classe comment ses dépendances sont injectées.

+0

Je ne connaissais pas cette classe. Cela semble très bien! – santiagozky

0

À mon humble avis vous devriez également fournir des setters pour obtenir les dépendances injectées manuellement. Ensuite, c'est une évidence dans le test de l'unité. Peut-être abaisser la visibilité de la classe par défaut si vous ne voulez pas que les setters soient invocables depuis l'extérieur du paquet.

Si vous souhaitez utiliser simulacres dans le scénario de test d'intégration, vous pouvez créer des haricots simulacres comme ceci:

<bean class="….Mockito" factory-method="mock"> 
    <constructor-arg value="….OperationDao" /> 
</bean> 

Ce serait une configuration simulée Mockito pour OperationDao comme haricot de printemps.

+0

Je suis d'accord que d'avoir des setters et getters est une bonne idée, surtout si à un moment donné j'utilise ces classes sans ressort. Mais pour ce cas précis je ne dois pas changer les classes – santiagozky

Questions connexes