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