40

データベースに対して動作する junit テストを実行するために、メモリ内で hdsqldb を使用しています。データベースは、Spring 構成を介して各テストを実行する前にセットアップされます。すべて正常に動作します。テストが失敗した場合、メモリ内データベースの値を検査できると便利です。これは可能ですか?もしそうなら、どのように?私たちの URL は次のとおりです。

jdbc.url=jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true

データベースは各テスト後に破棄されます。しかし、デバッガーが実行されているとき、データベースもまだ生きているはずです。sqldb databaseManager に接続してみました。それは機能しますが、テーブルやデータが表示されません。どんな助けでも大歓迎です!

4

8 に答える 8

71

単体テストまたは@Before/setUp()メソッドで、次の行を追加して HSQL Database Managerを起動できます。


org.hsqldb.util.DatabaseManager.main(new String[] {
  "--url",  "jdbc:hsqldb:mem:testdb", "--noexit"
});

または、「より洗練された」改良されたSwingバージョンの場合(ただし、機能はほぼ同じです)


org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
  "--url",  "jdbc:hsqldb:mem:testdb", "--noexit"
});

DB マネージャーを使用すると、アプリケーションの実行中にスキーマを検査し、ライブ インメモリ データベースで SQL クエリを実行できます。

特定の行でデータベースの状態を確認したい場合は、必ずビークポイントを設定するか、何らかの方法で実行を一時停止してください。

于 2010-06-19T15:22:42.163 に答える
17

HSQLはメモリ内にあるため、SQLDBデータベースマネージャに接続していると言っても、そうではありません。代わりに、SQLDBデータベースマネージャのメモリ空間にある別のデータベースに接続しているのではなく、単体テスト。これが、SQLDBデータベース・マネージャーのデータベースが空である理由です。

ここでorg.hsqldb.Server説明するように、を使用してHSQLをサーバーとして実行できます。

このorg.hsqldb.Serverクラスは通常、個別のプロセスを起動するために使用されますが、単体テストでインスタンス化して構成することもできます。これにより、リモートプロセスがデータベースに接続してクエリを実行できるようになります。

または、必要に応じて、単体テスト内から呼び出されるある種のダンプ機能を作成する必要があります。

余談ですが、単体テストでHSQLを使用することは、実際のデータベースとは異なるHSQLに対してコードが機能することを証明するだけです。これは、誤検知が発生する可能性があること、およびその逆の可能性があることを意味します。同じことは、モックAPI以上でも実現できます。実際のデータベースで機能するいくつかの適切な統合テストのために、データベーステストを保存してください。

于 2010-04-23T10:50:59.153 に答える
15

ユニットテストをブレークポイントまで実行し、Eclipseのデバッグパースペクティブで表示ビュー(ウィンドウ、表示ビュー、表示)を開き、次のように入力します。

    org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
  "--url",  "jdbc:hsqldb:mem:testdb", "--noexit"
});

(dimdmの投稿に従って)それを強調表示し、右クリックして[実行]を選択します。

ここに画像の説明を入力してください

于 2012-07-19T06:31:04.787 に答える