2010-11-25 11 views
8

私は同様の質問が尋ねられていることを知っています。 hereしかし、検索を行った私はもっと幸せである解決に来たhereテストのための春のコンテキストに模擬豆を注入する

私の唯一の問題は、私はこのソリューションを実装する方法がわからないということです。

私ができることをやりたいことは、HotswappableTargetSourceを使用して、自分のアプリケーション・コンテキスト内の選択されたBeanのBean定義をテスト・バージョンで上書きしてからテストを実行することです。

次に、それぞれのテストケースについて、ホットスワップ可能なBeanを指定したい場合は、それぞれのテストで独自のモックバージョンを作成し、スワップして再びスワップバックできるようにする必要があります。

テストが実行されているアプリケーションコンテキストを取得できますが、わからないものは、ホットスワップ可能なBeanの構成方法です。私は、XMLでBeanを構成するときにそれを行う方法を知っていますが、xmlを使用してBeanを構成することに戻ってみたくありません。

答えて

9

更新:それを行うライブラリがあります!

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

次のように解決策がある:

あなたがプロキシにあなたが交換したいBeanをアプリケーションの春のコンテキストを変更する必要があります。

<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されますこのbeanSwapへのプロキシ
  • beanSwappableあなたは
  • にbeanToSwapを豆を交換したいときに参照するBeanは、このようにテスト対象システムへの変更が必要である豆

のデフォルトの実装です。

そして、あなたのテストでは、コードは次のようになります:

@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

しかし、今非常に簡単にそれを行うためのライブラリがあります... https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations –

関連する問題