2011-09-22 59 views
1

我正在使用Spring和Hibernate,並希望使用DBUnit進行一些集成測試。在我的應用程序的context.xml我目前指定通過JNDI的查找,從屬性文件讀取JNDI名稱數據源:如何將jndi數據源查找交換到內存數據庫以進行集成測試?

<jee:jndi-lookup id="dataSource" 
    jndi-name="${datasource.myapp.jndi}" 
    cache="true" 
    resource-ref="true" 
    proxy-interface="javax.sql.DataSource" /> 

我想在內存數據庫交換這一點到(HSQLDB, h2等)通過提供一個新的屬性文件進行集成測試,這可能嗎?或者我應該使用不同的application-context.xml來進行集成測試?

回答

3

您可以爲產品和測試具有單獨的應用程序上下文,也可以爲查找失敗時應使用的JNDI數據源指定默認數據源。然後,在集成測試環境中沒有配置JNDI數據源。當查找失敗時,Spring將自動故障轉移到內存中的源代碼。

+0

不知道。尼斯。 – sourcedelica

+0

這聽起來不錯,但我寧願錯誤,如果春天找不到指定的數據源 – blank

+0

然後不要設置默認值。 – duffymo

0

將數據源bean定義移動到單獨的配置文件(infrastructure-config.xml)中,創建另一個名爲test-infrastructure-config.xml的版本,您可以在其中使用jdbc:embedded-database定義數據源標記

<jdbc:embedded-database type="hsql"> 
    <!-- in case you want to populate database, list the sql script files here --> 
    <jdbc:script location=".."/> 
    <jdbc:script location=".."/> 
</jdbc:embedded-database> 

一旦你這樣做,你指定的主應用程序的context.xml和測試基礎設施-config.xml中的出conatiner測試,並與基礎設施-config.xml中進行部署。

0

使用@Bean來定義您的數據源。在該方法中,您可以使用條件邏輯來確定環境,並執行JNDI查找或連接到您的內存數據庫。

相關問題