2011-04-21 211 views
0

我已經實現了一些使用Spring Test Framework的單元測試。測試包括通過名稱自動裝配的成員,例如,在null單元測試中注入null給autowired @Resource成員

@Resource 
private FooBar myFooBar; 

我配置我的測試,以便能夠與像提到here不同的配置運行。

某些配置不允許運行所有測試(例如,沒有可用的數據庫)。我想在這種情況下跳過測試。我跳過測試的標準是myFooBar == null

assumeTrue(myFooBar != null) 

我正面臨着如何將null注入此成員的問題。我試圖

<bean id="myFooBar" class="FooBar"> 
    <null /> 
</bean> 

但這不起作用(無效的含量被發現開始元素「空」 ...

如果我沒有在我的context.xml我得到一個配置豆NoSuchBeanDefinitionException

不能是很難春季剛剛注入null我的成員 - 但它definitly我很難:-)

我要補充一點,我FooBar類沒有默認構造函數。

您是否有任何關於如何注入null或如何忽略自動裝配測試類成員上缺少的bean定義的想法?

問候
    K. Claszen

+0

請參閱http://stackoverflow.com/questions/2163182/intentionally-setting-a-spring-bean-to-null/2163329 – axtavt 2011-04-21 15:20:51

+0

@axtavt謝謝我沒有找到。在鏈接的位置爲您+1。 – FrVaBe 2011-04-21 15:32:09

回答

7

如果你會使用@Autowired而不是自動裝配名與@Resource型自動裝配,然後你可以這樣做:

@Autowired(required = false) 
private FooBar myFooBar; 

設置required = false將使春季忽略此如果無法解析,則依賴關係,如documentation所述。

可以按名稱使用@Qualifier提供bean名稱仍然使用自動裝配與@Autowired

@Autowired(required = false) 
@Qualifier("myFooBar") 
private FooBar myFooBar; 

欲瞭解更多信息有關@Qualifier看到這個reference頁。

+0

這聽起來很不錯。星期二將回到辦公室。將盡快提供反饋意見。 – FrVaBe 2011-04-22 19:27:48

+0

適合我的作品。謝謝! – FrVaBe 2011-04-26 07:18:06