2012-02-11 18 views
1

HSQLDBを使用して、JUnitユニットのテスト用にhibernateのクラスとクエリをテストします。各テストのsetUp()コールでは、メモリ内のhsqlデータベース(hibernateを通じて)をテストクラスの名前とテストケースを使用して初期化し、メモリ内のdbインスタンスの接続文字列を作成します。しかし、私の2回目のテストでは、IDシーケンスは最初のテストから続きます。私は私のテストが絶対に独立していることを明らかにしたいので、これは私を驚かせます。私のIDに@GeneratedValue(strategy = GenerationType.AUTO)を使用しています。私の意図する開発と運用データベースはmysqlまたはpostgresqlですが、ここでは問題にはなりません。HSQLDB単体テスト用

更新 私は小さなテストケースを試しましたが、間違っていました。私はsecodnテストでより多くのエンティティを作成しましたが、異なるIDが発生しました。私の全体が悪い!

+0

これは予期しない動作です。データベース接続を初期化するために使用している 'setUp()'のコードを投稿できますか? – Perception

+0

小さなテストケースを試しましたが、間違っていました。私はsecodnテストでより多くのエンティティを作成しましたが、異なるIDが発生しました。私の全体が悪い! –

+0

実際には、2番目のテストは生成されたIDの実際の値に依存してはいけません。このテストでは、環境についての暗黙の前提はありません。 – yegor256

答えて

0

おそらく、HSQLDBメモリデータベースは、アプリケーション終了後にのみ削除されます。

各テストクラスの前にトランザクションをバインディングし、テストクラスが終了した時点でロールバックすることができます。