对于针对数据库抽象库针对11个不同RBDMS运行的集成测试,我需要经常重置架构和/或数据。这意味着,我为大多数测试用例运行了大量语句。
只在测试套件的开头需要模式重置。例如:
DROP VIEW
DROP TABLE
DROP SEQUENCE
DROP PROCEDURE
...
CREATE TABLE
...
只有编写数据的测试才需要数据重置。例如:
DROP SEQUENCE
DELETE FROM TABLE ...
CREATE SEQUENCE
INSERT INTO TABLE ...
只读测试非常快,因为它们不需要任何重置。在某种程度上,我只是将一个SQL文件读入内存并使用它执行每个语句:
// No bind variables, all hard parses
// Bind variables won't help much, though as the "hard-parse-reduction" isn't very big.
stmt = connection.createStatement();
stmt.execute(sql);
在某些系统上,这很慢。有没有更好的方法来使用JDBC?或者我必须接受这样的事实:这可能很慢......?
答案 0 :(得分:1)
部分想法:对于更快的删除,许多DBMS都有一个“截断表”声明。
另一个部分想法:您可以只复制空数据库的文件,而不是在测试开始时删除并重新安装所有内容。这需要深入了解所有11个DBMS,并且您需要关闭这些过程。