16

My integration tests would run much faster if I used in-memory-database instead of PostgreSQL. I use JPA (Hibernate) and I need an in-memory-database that would be easy to switch to using JPA, easy to setup, and reliable. It needs to support JPA and Hibernate (or vice verse if you will) rather extensively since I have no desire to adopt my data access code for tests.

What database is the best choice given requirements above?

4

3 に答える 3

18

統合テストでは、HSQLDB よりも私が好むH2 (HSQLDB の元の作成者から) を使用しています。高速です(テストをできるだけ高速にしたい)、互換モードなどの優れた機能がいくつかあり、開発チームは非常に反応が良いです (HSQLDB はごく最近まで何年も休眠状態でした)。

于 2010-08-09T22:52:52.330 に答える
4

JavaでのJPA/Hibernateの永続性の統合テストにHSQLDB インメモリを使用しています。非常に迅速に起動し、特別な設定は必要ありません。

HibernateでHSQLDBを使用する際にこれまでに見た唯一の問題は、バッチサイズを0に設定する必要があることでしたが、それは古いバージョンに関連している可能性があります。掘り下げて、その問題の詳細を見つけることができるかどうかを確認します。

Derbyは最近、メモリ内モードをサポートしており、実験的なものとしてマークされなくなりました。

于 2010-08-09T21:16:06.467 に答える
2

ダービーを使用しています。1 つには、テスト後にシャットダウンする必要がないため、単体テストあたりのコード行が約 3 行少なくなります。ただし、EclipseLink などのテーブルを削除および作成できる JPA 実装を使用する必要があります。

Derby は、ファイルから新しいメモリー内データベースを初期化することもできるため、参照データベースを用意して、いつでもそこに戻すことができます。

ただし、単体テストの場合は、単体テストの @Before ロジックでオブジェクトを作成することを好みます。特に JPA を使用すると、リファクタリングを柔軟に行うことができ、基礎となるデータベース構造、DBunit などの他のツールについて心配する必要がないため、より簡単です。実質的に静的構造に依存しており、リファクタリングは、Eclipse のリファクタリング機能に依存するのではなく、手動で DBunit XML を変更することを意味します。

于 2011-09-05T03:48:42.900 に答える