gpt4 book ai didi

testing - Grails - 为集成测试重新创建数据库模式

转载 作者:行者123 更新时间:2023-11-28 20:09:03 26 4
gpt4 key购买 nike

是否有一种方便的方法来强制 Grails/Hibernate 从集成测试中重新创建数据库模式?

最佳答案

如果您在 DataSource.groovy 中添加以下内容,将在运行集成测试之前创建一个空数据库:

environments {
test {
dataSource {
dbCreate = "create"
}
}
}

默认情况下,每个集成测试都在测试结束时回滚的事务中执行,因此除非您不使用此默认行为,否则不需要以编程方式重新创建数据库。

更新

根据您的评论,您似乎确实希望在某些集成测试之前重新创建架构。在这种情况下,我能想到的唯一方法就是运行


class MyIntegrationTest {

SessionFactory sessionFactory

/**
* Helper for executing SQL statements
* @param jdbcWork A closure that is passed an <tt>Sql</tt> object that is used to execute the JDBC statements
*/
private doJdbcWork(Closure jdbcWork) {

sessionFactory.currentSession.doWork(

new Work() {
@Override
void execute(Connection connection) throws SQLException {

// do not close this Sql instance ourselves
Sql sql = new Sql(connection)
jdbcWork(sql)
}
}
)
}

private recreateSchema() {

doJdbcWork {Sql sql ->
// use the sql object to drop the database and create a new blank database
// something like the following might work for MySQL
sql.execute("drop database my-schema")
sql.execute("create database my-schema")
}

// generate the DDL and import it
// there must be a better way to execute a grails command from within an
// integration test, but unfortunately I don't know what it is
'grails test schema-export export'.execute()
}

@Test
void myTestMethod() {
recreateSchema()
// now do the test
}
}

首先,此代码完全未经测试,因此请以高度怀疑和低期望对待。其次,您可能需要更改集成测试的默认事务行为(使用 @Transactional)才能使其正常工作。

关于testing - Grails - 为集成测试重新创建数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com