2016-05-15 16 views
0

私はmysqlデータベースを指すアプリケーションを持っています。dbunit実際のデータベースをテストデータベースと同期させる方法

DBUnitを使用してテスト環境をセットアップしようとしていますが、正常に動作します。

DBUnitを設定するとき、私はそれがSAME mysqlデータベースを指していたという問題があります。したがって、DBUnitが実行されると、指定されたdataset.xmlが使用され、元のデータベースの情報が上書きされます。それは私がそれを指しているところにあるので意味があります。

質問は私のDBUnitが指すように、テスト用にのみ新しいデータベースを作成するはずですか?もしそうなら、元のデータベースとテストのための構造の同期をどうすれば管理できますか?

ありがとうございます。

答えて

1

私はDBUnitが指すように、テスト用にのみ新しいデータベースを作成する予定ですか?

これは、複数の問題を排除するために行う方が良い方法です。

元のデータベースとテスト用の構造の同期をどうすれば管理できますか?

あなたは、Hibernate、Spring/Spring Boot/Spring Data/Flyway/LiquiBase/etcなどの永続性スタックには、技術について言及していません。これを実装する方法の詳細を提案する。一般的には、起動時のスキーマでDDLを実行します(FlywayやHibernateの自動生成などの管理DDLから)。

また、私の好みと、典型的なテスト手法がである:

  1. アンのインメモリなどのApache Derbyのようにそのスピードについて/組み込みデータベースは、自動的にちょうどテストを起動する前に開始しました。
  2. 注釈付きエンティティからのHibernate DDL genを使用してスキーマ内にテーブルを作成します。
  3. テーブルに既存の行がありません。ビルド出力ディレクトリのサブディレクトリにそのファイルのいずれかを格納するときに、組み込みデータベースとクリーンビルドで自動的に実行されます。
  4. dbUnitはDatabaseOperation.CLEAN_INSERT [0]で設定されています。
  5. 各テストの最小dbUnitデータ。
+0

偉大な回答ありがとう! はい私はhibernate-entitymanagerを使用していて、私はliquibaseを使ってmysqlデータベースを管理しているとしましょう。 私の頭に浮かぶのは、Hibernate DDL genを使用してメモリ内データベースのスキーマとそのテーブルを作成するのは "安全"ですか?または両方のデータベースに同じliquibaseを使用する方法を見つけるべきでしょうか? –

+0

チームがエンティティを正しく管理している場合、Hibernate DDL genを使用することはおそらく非常に安全です。ただし、エンティティに必要な注釈がすべてない場合は、LiquiBaseの設定が最適です。 チームはLiquiBaseファイルを書き込もうと努力しており、LiquiBaseは "マスター定義"を持ち(プロダクション用に使用されています)、Hibernate DDL genの代わりに使用します。このようにして、テストはdev/test/prod環境と同じ設定を使用します。これは非常に有用で重要です。 – Jeff

+0

ジェフ、もう一つ疑いがあります。私のDAOは私のpersistence.xmlで指定されている接続を使用しています(mysqlへ)...私のdbunitはPropertiesBasedJdbcDatabaseTester(hsqlへ)で指定した接続を使用しています...だから、テストを実行すると、DAOは私のメモリ内のデータベースを指しません。この問題を解決するのに手伝ってくれますか? –

関連する問題