3

我将编写几个集成测试来测试与 db 的交互。对于每个测试,我需要有一个特定的 db 快照。每个数据库快照保存在 .sql 文件中。我想要的是在某些测试方法中执行某些脚本文件,如下所示:

@Test
public void test_stuff(){
   executeScript(finame.sql);

   ... testing logic ...

   clean_database();
}

hibernate 有办法做到这一点吗?

4

4 回答 4

3
  • 您可以在休眠启动时自动执行 SQL 脚本:将您的 SQL 命令写入一个名为 import.sql 的文件中,并将其放在 CLASSPATH 的根目录中。

  • 您无需为测试清理数据库,只需在每次测试结束时将测试设置为事务性并回滚即可。因此,您确信您的数据库没有被您的测试污染。例如,使用 Spring:

    @Transactional
    @TransactionConfiguration
    public class MyTest {
    ...
    }
    

如果您不使用 Spring,请尝试使用支持默认回滚事务的测试框架。

于 2010-01-15T14:40:08.233 回答
2

这里讨论了弃用的 Session.connection() 方法的主题

于 2010-10-06T06:59:30.207 回答
0

你听说过 Hypersonic SQL 吗?这是一个内存数据库,您的所有表都驻留在内存中,然后进行测试(使用读取、更新、插入、删除),最后当您关闭时,所有数据都消失了。阅读更多:http ://www.hsqldb.org/

于 2010-08-06T19:30:15.933 回答
0

您可以通过休眠会话实例获取底层 JDBC 连接:

https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#connection()

因此,您可以编写您的 executeScript() 方法来获取文件名和休眠会话并读取文件并在 jdbc 连接上执行 sql。

高温高压

于 2010-01-15T13:14:15.427 回答