2013-08-24 88 views
-1

我的理解是默認使用Grails使用H2嵌入式數據庫進行測試。 我DataSource.groovy中配置一個本地Postgres數據庫作爲根datasoure使用H2數據庫在Grails中進行集成測試

dataSource { 

    driverClassName = "org.postgresql.Driver" 
    dialect = org.hibernate.dialect.PostgreSQLDialect 

    url = ... 
    pooled = true 
    ... 

但我不希望在集成測試此使用。我寧願使用H2嵌入式選項。那麼如何覆蓋這個集成測試環境並使其使用嵌入式H2數據庫呢?

由於

回答

3

放入則dataSource塊基線配置並與環境塊覆蓋它作爲Grails文檔的部分4.2 Environments說明。

dataSource { 
    pooled = true 
    driverClassName = "org.h2.Driver" 
    username = "sa" 
    password = "" 
} 
environments { 
    development { 
     dataSource { 
      dbCreate = "create-drop" 
      url = "jdbc:h2:mem:devDb:MVCC=TRUE;LOCK_TIMEOUT=10000" 
     } 
    } 
    test { 
     dataSource { 
      dbCreate = "update" 
      url = "jdbc:h2:mem:testDb:MVCC=TRUE;LOCK_TIMEOUT=10000" 
     } 
    } 
    production { 
     dataSource { 
      driverClassName = "org.postgresql.Driver" 
      dialect = org.hibernate.dialect.PostgreSQLDialect 
      dbCreate = ... 
      url = ... 
     } 
    } 
} 
+0

這並沒有爲我工作 - 當我運行我的集成測試,它說,它是設置部署進行測試,但它完全忽略了我的測試數據源,這是mysql,並且使用了一個未知的內存,儘管我沒有提到整個datasourc.groovy中的h2 db。很奇怪。 –

0

我有同樣的問題,但直到現在我沒有找到答案。也許,設置現場方言裏面DataSource.groovy的是這樣的:

test { 
    dataSource { 
      dbCreate = "update" 
      dialect='org.hibernate.dialect.H2DialectPatch' 
      url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE" 

    } 
}