2013-08-24 81 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" 

    } 
}