gpt4 book ai didi

unit-testing - H2数据库恢复到特定状态进行测试

转载 作者:行者123 更新时间:2023-12-05 05:26:29 27 4
gpt4 key购买 nike

我们使用 H2 数据库来执行测试。为了将每个测试与另一个测试隔离开来,在每次测试之前删除并重新创建数据库模式和基本数据设置。

是否可以在第一次设置数据库后创建一个还原点,并在每次测试之前还原该点的数据?

SCRIPT 只是创建一个包含所有表和数据的 sql 文件。与我们自己的初始化没有太大区别。

问题 database restore to particular state for testing是相同的,只是对于 Oracle 和 Postgres。

最佳答案

一个老问题,但我发现它仍然相关。据我所知,没有还原点支持。

这是一种简单而快速的备份/恢复方法。

在运行第一个测试之前创建备份:

Connection conn = DriverManager.getConnection("jdbc:h2:mem:myDatabase;DB_CLOSE_DELAY=-1;LOG=0");
Statement stat = conn.createStatement();
stat.execute("SCRIPT TO 'memFS:myDatabase.sql'");
stat.close();
conn.close();

每次测试后恢复:

Connection conn = DriverManager.getConnection("jdbc:h2:mem:myDatabase;DB_CLOSE_DELAY=-1;LOG=0");
Statement stat = conn.createStatement();
stat.execute("DROP ALL OBJECTS");
stat.close();
conn.close();

conn = DriverManager.getConnection("jdbc:h2:mem:myDatabase;DB_CLOSE_DELAY=-1;INIT=runscript from 'memFS:myDatabase.sql';LOG=0");
conn.close();

请注意 SHUTDOWN命令原来比 DROP ALL OBJECTS 快,但它引起了一些问题(连接池无法重新建立连接)。

我不会说上述方法很慢,远非如此。但是对于大型数据库和数千个测试,仍然有改进的余地,因为上述方法需要一些时间。我设法将备份/恢复速度提高了几倍(对于具有约 350 个表的数据库,约 15 毫秒)手动编写脚本执行 TRUNCATE TABLE , ALTER SEQUENCE并执行 INSERT所有初始数据(需要 SET REFERENTIAL_INTEGRITY FALSE 才能使清理/恢复过程非常快)。代码很繁琐,但值得付出努力。

关于unit-testing - H2数据库恢复到特定状态进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623583/

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