我将编写几个集成测试来测试与 db 的交互。对于每个测试,我需要有一个特定的 db 快照。每个数据库快照保存在 .sql 文件中。我想要的是在某些测试方法中执行某些脚本文件,如下所示:
@Test
public void test_stuff(){
executeScript(finame.sql);
... testing logic ...
clean_database();
}
hibernate 有办法做到这一点吗?
我将编写几个集成测试来测试与 db 的交互。对于每个测试,我需要有一个特定的 db 快照。每个数据库快照保存在 .sql 文件中。我想要的是在某些测试方法中执行某些脚本文件,如下所示:
@Test
public void test_stuff(){
executeScript(finame.sql);
... testing logic ...
clean_database();
}
hibernate 有办法做到这一点吗?
您可以在休眠启动时自动执行 SQL 脚本:将您的 SQL 命令写入一个名为 import.sql 的文件中,并将其放在 CLASSPATH 的根目录中。
您无需为测试清理数据库,只需在每次测试结束时将测试设置为事务性并回滚即可。因此,您确信您的数据库没有被您的测试污染。例如,使用 Spring:
@Transactional
@TransactionConfiguration
public class MyTest {
...
}
如果您不使用 Spring,请尝试使用支持默认回滚事务的测试框架。
这里讨论了弃用的 Session.connection() 方法的主题
你听说过 Hypersonic SQL 吗?这是一个内存数据库,您的所有表都驻留在内存中,然后进行测试(使用读取、更新、插入、删除),最后当您关闭时,所有数据都消失了。阅读更多:http ://www.hsqldb.org/
您可以通过休眠会话实例获取底层 JDBC 连接:
https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#connection()
因此,您可以编写您的 executeScript() 方法来获取文件名和休眠会话并读取文件并在 jdbc 连接上执行 sql。
高温高压