私は、インメモリデータベース上で実行される統合テストを行っています。私は、SQLスクリプトが初期化後に実行されることを期待@Sqlを使用した@SpringBootTest:スクリプトの実行とコンテキストの初期化の順序
spring:
jpa:
hibernate:
ddl-auto: create-drop
:DBスキーマがHibernateが再現されたテスト・コンテキストの初期化中
@RunWith(SpringRunner.class)
@SpringBootTest
@Sql("/clean-data-in-all-tables.sql")
public class SomeTest {
@Test
public void shouldDoSomehting() {}
}
:各試験の署名は、多かれ少なかれ、このようになりますコンテキスト以降とdbスキーマ生成後。ただし、場合によってはclean-data-in-all-tables.sql
がスキーマの生成より前に実行され、まだ作成されていないテーブルが必要であるため、失敗します。
私は説明した方法で500を超えるテストを書いていますが、それ以上の類似のテストを追加するまで、すべてうまくいきました。
GradleまたはIntelliJで一緒に実行するとテストが失敗します。 失敗したテストは、最近追加されたテストではありません。これは私が追加したものとは全く関係のない古いテストです。また、奇妙なことに、からIntelliJまで1つずつ実行すると、のテストがうまくいきません。
これはspring-bootのバグのようですが、まだ解決策を見つけることを試みています。同時に私は問題を解決するために多くのことを試したが、どれも役に立たなかった。
あなたのアイデアは、何が助けになるか、私のコードで間違っている可能性があることをお伝えください。
UPDATE: 回避策が見つかりました:create
にcreate-drop
からspring.jpa.hibernate.ddl-auto
を変更するには、問題を解決します。
しかし、質問はまだ開いていますこのような奇妙な動作の理由は何ですか?
新しい設定を追加しましたか? SpringBootTestは、テストパッケージからプロジェクトルートまでの構成を探しています。 –
いいえ、私は新しい設定を導入しませんでしたが、私は既存の設定を変更しませんでした。 –