Spring/Hibernate テスト:DDL作成後のテストデータの挿入
-
25-09-2019 - |
質問
インメモリ HSQL データベースで実行されるいくつかの統合テストを含む Spring/Hibernate Web アプリがあります。Hibernate はこの空のデータベースを取得し、hbm2ddl=create のおかげですべてのテスト テーブルと制約を作成します。ただし、afterPropertiesSet() メソッド中にデータベースから特定の構成値をチェックする新しい Bean があるため、この Bean が初期化されるときに、そのような行がデータベースに存在する必要があります。
Rail のテスト フィクスチャと同等の Java/Spring/Hibernate をセットアップする良い方法はありますか?Hibernate に「このテーブルを作成するたびに、その直後にこれらの行を挿入する」ように指示する方法を見つけようとしています。追加できるコールバックやフックが見つかりませんでしたが、別の方法があるかもしれません。
解決
私は「直後にこれらの行を挿入し、あなたがこのテーブルを作成するとき、」休止状態を伝える方法を見つけようとしている。
Hibernateは3.1ので、あなたが休止状態の実行時のクラスパスにし、スキーマ・エクスポートの時にimport.sql
と呼ばれるファイルを含めることができ、Hibernateはスキーマがエクスポートされた後、そのファイルに含まれているSQL文を実行します。
import.sql:あなたのユニットテストで簡単にインポートデータの
Hibernateは小ぎれいな機能を持っています それは重く下、文書化され、 未知の。あなたは、SQLスクリプトを実行することができます
SessionFactory
作成中 右のデータベーススキーマの後 新鮮でデータをインポートする世代 データベース。あなただけのファイルを追加する必要があります あなたのクラスパス内の名前付きimport.sql
ルートとセットのいずれかcreate
か あなたのようcreate-drop
hibernate.hbm2ddl.auto
プロパティます。私は、Hibernate検索中のためにそれを使用します アクション今私が始めていることを クエリ章。それは私を初期化 以下のためのデータの新鮮なセットのデータベース 私のユニットテスト。 JBossのSeamはそれを使用しています 様々な例でたくさん。
import.sql
は非常に単純な機能です しかし、一度に非常に便利です。思い出します SQLは、に依存する可能性があることを データベース(ああポータビリティ!)。この詳細については、#import.sql file delete from PRODUCTS insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...'); insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
機能、エヤルのブログを確認し、彼 それについてちょっといいエントリを書きました。 追加追加したい場合は覚えておいてください データベースオブジェクト(インデックス、テーブルおよび ように)、あなたはまた、補助を使用することができます データベースには、機能オブジェクトます。
それはまだ実際に文書化されていません。
他のヒント
は、任意のSQLコマンドを実行することを可能にする3.6構成を休止することである:
hibernate.hbm2ddl.import_files
http://docs.jboss.orgに参照してください。 /hibernate/core/3.6/reference/en-US/html_single/ に、ドキュメントにエラーがある気づき:プロパティは、最後にsのimport_files、です。
。JUnit テストについて話している場合と、それを使用している場合 AbstractTransactionalDataSourceSpringContextTests 次のようなオーバーライドできるメソッドがあります onSetupBeforeTransaction テストテーブルデータなどを事前に設定するためのフックを提供します。