2010-11-25 27 views
8

Je sais que des questions similaires ont été posées, par ex. here, mais après avoir fait une recherche, je suis tombé sur une solution je suis beaucoup plus heureux avec herel'injection de fèves simulées dans le contexte de printemps pour les tests

Mon seul problème cependant, est que je ne suis pas sûr de savoir comment implémenter cette solution. Ce que je veux être en mesure de faire est via le HotswappableTargetSource remplacer les définitions de beans de sélectionner des beans dans mon contexte d'application avec mes versions de test, puis exécutez le test. Puis, pour chaque cas de test, je voudrais spécifier les beans que je veux remplacer à chaud, puis chaque test doit être capable de créer ses propres versions fictives, de les échanger et de pouvoir revenir en arrière.

Je suis capable d'obtenir le contexte d'application avec lequel le test fonctionne, mais ce que je ne sais pas, c'est comment configurer un bean pour le remplacer à chaud. Je sais comment le faire lors de la configuration des beans avec xml mais je ne veux pas revenir à l'utilisation de xml pour configurer les beans.

Répondre

9

MISE À JOUR: Il y a une bibliothèque qui le fait!

https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations

La solution est la suivante:

Vous devrez changer le contexte du printemps de votre application proxy du grain que vous voulez échanger:

<bean id="beanSwappable" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="targetSource" ref="beanSwap" /> 
</bean> 

<bean id="beanSwap" class="org.springframework.aop.target.HotSwappableTargetSource"> 
    <constructor-arg ref="beanToSwap" /> 
</bean> 
  • beanSwap est le proxy sur ce beanSwap.
  • beanSwappable est le haricot que vous faites référence lorsque vous souhaitez échanger le grain
  • beanToSwap est l'implémentation par défaut de la fève

Ainsi, un changement du système en cours de test est nécessaire.

Et dans votre test le code ressemblera:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "test.xml", "spring.xml" }) 
public class Test { 

    @Resource(name="beanSwappable") 
    Bean b; 

    @Resource(name = "beanSwap") 
    HotSwappableTargetSource beanSwap; 

    public void swap() { 
     Bean b = << create mock version >> 
     beanSwap.swap(b); 
     // run test code which 

    } 
} 
+3

Mais maintenant, il y a une bibliothèque pour le faire très facilement ... https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations –