2010-11-25 121 views
8

我知道有類似的問題,例如: here,但做了搜索,我找到了一個解決方案,我很開心here將模擬豆注入春天環境進行測試

但我唯一的問題是,我不知道如何實現此解決方案。

我想要做的就是通過HotswappableTargetSource覆蓋我的應用程序上下文中選擇bean的bean定義與我的測試版本,然後運行測試。

然後對於每個測試用例,我想指定哪些bean想要熱插拔,然後每個測試必須能夠創建自己的模擬版本並交換它們,並且能夠再次交換。

我能夠獲得測試運行的應用程序上下文,但我不知道如何配置一個bean是可熱插拔的。在使用xml配置bean時我知道該怎麼做,但我不想回到使用xml來配置bean。

回答

9

更新:有一個庫可以做到!

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

的解決方案如下:

您需要將您的應用程序的Spring上下文改爲代理要交換豆:

<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 – 2012-10-05 12:41:12