2011-08-17 70 views
0

這個問題不是showstopper,但我一直想知道是否有可能從bean的代碼中獲取用@ContextConfiguration(「mycontext.xml」)註解的類(測試類)的類對象在mycontext.xml中定義?獲取用@ContextConfiguration註解的類的類對象?

動機:

在我目前的項目我把相當多的測試春天背景,這已成爲越來越多的類似的海誓山盟在過去幾個月(所以不是微調各,我纔剛剛開始懶洋洋地拉着一切)。它已經到了一個地步,它們大多隻在它們運行的​​數據庫初始化腳本中有所不同(如果它們始終不同)。 所以我想到了一個乾淨利落的方式來擺脫所有隻包含import和init-db標籤的上下文xml。

我主要尋求的解決方案:

標註的單元測試類,這在某種程度上設置路徑數據庫初始化腳本,我想對測試用例運行的註釋。注入屬性佔位符值可能或多或少地實現它,但能夠運行1..n數據庫腳本將會很好。

我認爲與BeanFactoryPostProcessors和BeanPostProcessors很多可以實現,但對於初學者,我如何獲得我把我的測試類魔術註釋?

我希望這篇文章有一定道理,任何投入都是歡迎的。

+0

我你使用JUnit,再有就是你mayby沒有考慮到的又一其他陷阱。 Junit爲每個測試用例創建一個測試類的新實例! – Ralph

回答

0

我你使用JUnit,再有就是你mayby沒有考慮到的又一其他陷阱。 Junit爲每個測試用例創建一個測試類的新實例!

我有這樣的感覺,你試圖做錯整個東西,或者讓一個複雜的說。

爲什麼不爲每個包含核心彈簧配置的db腳本填充一個小的彈簧配置,並且還引用db init腳本。 然後,您可以使用該特定配置的@ContextConfiguration

JUnit測試用例

@RunWith(SpringJUnit4ClassRunner.class) 
@Transactional 
@ContextConfiguration("classpath:/META-INF/spring/config1.xml") 
public class MyTest {...} 

config1.xml

... 
<import resource="classpath:/META-INF/spring/applicationContext.xml" /> 
<bean class="MyDbScript"> 
    <property name="file" value"classpath:/SCRIPTS/config1.sql" /> 
</bean> 
... 

的其它解決辦法是不會自動設置在啓動數據庫中,但一個調用之後。 我不是100%肯定它的工作,因爲我不知道是否在注入測試方法之前或之後運行註釋的測試方法。

假設你有一個有一個方法run這需要腳本運行HandTriggeredDbScriptExecutor類的豆:

@RunWith(SpringJUnit4ClassRunner.class) 
@Transactional 
@ContextConfiguration("classpath:/META-INF/spring/applicationContext.xml") 
public class MyTest { 

    @Autowire 
    HandTriggeredDbScriptExecutor handTriggeredDbScriptExecutor; 

    @Before 
    public void setUpDb() { 
     this.handTriggeredDbScriptExecutor.run("classpath:/SCRIPTS/config1.sql"); 
    }   
}