1

データベース抽象化ライブラリの 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でこれを行うより良い方法はありますか? それとも、これが遅くなる可能性があるという事実を受け入れる必要がありますか...?

4

1 に答える 1

2

部分的なアイデア: 削除を高速化するために、多くの DBMS には "truncate table" ステートメントがあります。

別の部分的なアイデア: テストの開始時にすべてを削除して再インストールする代わりに、空のデータベースのファイルをコピーするだけで済みます。ただし、これには 11 のすべての DBMS に関する深い知識が必要であり、プロセスをシャットダウンする必要があります。

于 2011-08-06T09:10:17.657 に答える