web-dev-qa-db-ja.com

Spring BootとFlyway:統合テストの前にデータベースデータをクリアする

Spring Boot Framework(v2.0.2)を使用してRESTサービスを構築しています。ここでは、データベースで統合テストを実行しています。グーグルで検索したところ、データベースのクリーニングに関する記事がたくさんあります。テストの前ですが、残念ながら、Springブートではなく、非効率的またはハックであることがわかりました。この問題の良い方法を提案していただけませんか。

理想的には、データベースは各テストの前ではなく、スイートや各テストクラスなどのグループの前にクリアする必要があると思います。見つかった提案の1つは次のようになります。

@Autowired
protected Flyway flyway;

@Before
public void init() {
    flyway.clean();
    flyway.migrate();
}

これは、各テストの前にデータベースを再構築し、明らかに効率的ではありません。 Springは静的フィールドを挿入しないため、これを静的コンテキストに変更して@BeforeClassを使用しても機能しません。

このソリューションを機能させるために、静的コンテキストからこのフライウェイBeanに到達するための優れた方法はありますか?

ここのサブ質問: Flywayにはcleanコマンドがあり、データをクリアするだけでなく、すべてを削除してから、migrateコマンドが再度マイグレーションを実行します。これもオーバーヘッドのようです。とにかく起動時に移行がチェックされるので、各テストグループの前にすべてを破棄して再構築する必要はないと思います。データをクリアするだけで十分です。これをどのように達成できるかについてアドバイスをいただけますか?

要約すると、統合テストの各グループ(クラスごとなど)の前に、データベースデータ(可能であればテーブルではない)を削除する標準的な方法を探しています。 Springブートを使用している間、誰もがこのタスクに直面していると思うので、フレームワーク自体で考慮されているいくつかの素晴らしい解決策があるかもしれません。

ありがとうございます!

6
Samurai Girl

テスト用の構成ファイルを作成できます。すべてのテストの前に1回実行されます。

@Configuration
public class TestConfig {
@Bean
public FlywayMigrationStrategy clean() {
    return flyway -> {
        flyway.clean();
        flyway.migrate();
    };
}
}
7
evkm