2017-03-26 10 views
0

Spring-JPAおよびSpring-Data-Mongoリポジトリ用のJUnitテストを作成しています(各クラスには1つのリポジトリのみのテストが含まれています)。各テストのために、私はクリーンなデータベースを取得するので、それが正常に動作しJPA(Postgresのか、H2 DB)についてはMongoDB用のSpring DirtiesContext

@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) 

:各テストは、私はDirtiesContextを使用していますが実行される前に、データベースをクリーンアップします。しかし、MongoDBでは正しく動作しません。データベースは各テストの前に再作成されません。

しかし私はPostgresやH2では動作するが、Mongoでは動作しない理由を理解したいと思っています。

答えて

0

デフォルトでSpringテストインフラストラクチャは、同じ構成を使用するテスト用に作成されたアプリケーションコンテキストを再利用します。

@DirtiesContextは、アプリケーションのコンテキストをダーティとマークします。つまり、何らかの方法でテストによって変更された場合(または前のテストの場合)、新しいアプリケーションコンテキストが作成されます。

これには、データベース用に新しいDataSourceを作成することが含まれます。

H2メモリ内データベースを使用して、新しいDataSourceを作成して(以前のものを削除する)、実際にデータベースを削除して新しいデータベースを作成します。この動作は、JDBC-URLパラメータを使用して構成できます。詳細は、http://www.h2database.com/html/features.html#embedded_databasesを参照してください。

では、通常のデータベース落ちしたり、Connection S/DataSource秒を再作成は、データベースに何もしませんし、あなたのデータとスキーマは変更されません。

+0

あなたの答えをありがとう。だから今の質問はPostgreSQLでうまくいく理由です。 PostgreSQLデータベースでは、コンテキストがダーティとマークされたときにデータが更新されます。したがって、Mongoとまったく同じように動作します。しかし、モンゴにとってはうまくいかない。なぜなのかご存知ですか? – Adam

+0

私はアプリケーションのプロパティで私はspring.jpa.hibernate.ddl-auto = create-dropを使用しているので、Postgresのために動作すると思います。このモードを更新するように変更すると、DirtiesContextが設定されていてもデータは削除されません(スキーマは再生成されません)。今私はモンゴーにも同様の選択肢があると思いますか? – Adam

関連する問題