如何为Grails集成测试创建示例数据源?

时间:2013-01-07 18:56:56

标签: grails datasource integration-testing

在Grails 2.1.x中,我想为集成测试创建一个额外的dataSource,以便我可以验证我的服务是否从用户指定的dataSource动态提取数据。目前我的测试非常简单,例如:

@Test
void "get Action Types by data source name returns all action types"() {
    new ActionCache(actionType: 'Action Type 1').test.save()
    new ActionCache(actionType: 'Action Type 2').test.save()
    new ActionCache(actionType: 'Action Type 3').save()

    def result = reportService.getActionTypesByDataSource('test')
    assert result.size() == 2
}

如果我在名为test的DataSource.groovy中为测试环境配置新的dataSource,我可以通过测试,但是新的dataSource出现在我的所有测试中;单位和整合。理想情况下,我想使用以下内容创建一个新的dataSource作为集成测试的setUp的一部分:

def grailsApplication

@Before
void setUp() {
    grailsApplication.config.dataSource_test = {
        dbCreate = "update"
        url = "jdbc:h2:mem:testDb;MVCC=TRUE"
    }
}

但似乎在运行集成测试之前加载了dataSource,我无法弄清楚如何添加它们。

1 个答案:

答案 0 :(得分:0)

这听起来像是一个自定义环境。在DataSource.groovy中,你应该看到一个看起来像这样的部分:

test {
    dataSource {
        dbCreate = "update"
        url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
    }
}

我会在测试块之后添加一个名为IntegrationTest的自定义环境,如下所示:

integrationTest {
    dataSource {
        dbCreate = "update"
        url = "jdbc:h2:mem:myinttestDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
    }
}

要使用此自定义环境运行,您可以像这样启动grails应用程序:

grails -Dgrails.env=integrationTest run-app

希望这有帮助。