2

私は、統合テストで実際のデータベースを使用すると、それらが大幅に遅くなることを学びました。だから、私は大幅に私の統合テストの速度を向上させるメモリデータベースを使用する必要があります。メモリ交換でPostgreSQLを使用する統合テストの準備方法は?

私はアプリケーション開発にSpringbootを使用しています。テスト目的でPostgreSQLを設定するには? PostgreSQLの構文との互換性が高いメモリデータベースがありますか?

何もない場合は、どのように統合テストを行うべきですか。

答えて

1

実際のポストグラムでの私のdbテストの中には、それぞれ10msかかるものがあります。私は各テストで複数のコミットを行います。だから:

postgresネイティブ機能のカバレッジを得るには、同じデータベースが必要です(気付いたように、h2と他のインメモリDBはあまり互換性がありません)。 postgresにはメモリ内モードはありません。 機能テストの場合、実際のデータベース自体は、インメモリデータベースよりもはるかに遅くありません。違いは通常起動時にあります(ポストグル9.6の場合は4秒です)。しかし、テストのライフサイクルがスマートで、db startの数を1または0に減らすことができれば(開発用のdbを常に用意しておくことで)、問題は目立たなくなります。

実際のpostgresを取得し、ライフサイクルを正しく設定してください。あなたが問題の一部を解決することができますいくつかのツールがあります。

  1. testcontainersは、あなたが本当の デシベルを提供するのに役立ちます。

    • 多くの作業を作成して、スキーマとデータを維持するために必要とされています -

    • dbunitはあなたがテスト

      両論の間でデータをきれいにするのに役立ちます。特にあなたのプロジェクトが集中的な開発段階にあるときは特にそうです。

    • それは突然、あなたがこのツールによってサポートされていないいくつかのDBの機能を使用したいので、もし、それ
  2. testegrationをテストすることは困難である別の抽象化レイヤです - テントあなたがフル提供するために、使用する準備ができてと拡張可能なライフサイクル(開示:私は創作者です)。

    短所:他のステップは、OSレベルでメモリにDBを移動するだろう

    • だけ小規模なプロジェクトのための無料
    • 非常に若いプロジェクト

。再び、すべてのロードが必要であるため、最初の起動時間は似ています。いくつかの出発点herehere

短所:

  • あなたのチーム内のすべてのDEVは(あなたのチームは、異種環境を持っている場合)のOS間で移植
  • 彼のローカル環境ではなく変更する必要が
2

この質問は意見を求めますが、ここに行く:

あなたは、PostgreSQLを使用するアプリケーションをテストする場合は、あなたのテストのためのPostgreSQLを使用する必要があります。 SQLの方言と振る舞いは、異なるデータベース管理システム間であまりにも多すぎます。

RAMに収まるほど小さいデータベースを使用すると、PostgreSQLを非常に高速にすることができます。これは、全体的なパフォーマンスではなく、機能をターゲットにした統合テストで可能になるはずです。

+0

質問にも「どのように?部。 –

+0

特別な設定は必要ありません。メモリが足りなくてもメモリが足りない場合は、メモリが残っています。ファイルシステムのキャッシュに依存したくない場合は、データベース全体が収まるように 'shared_buffers'を十分大きく設定してください。 –

1

アプリケーション内でどのようにデータベースにアクセスしますか?プレーンJDBCを使用するか、その上に抽象化(JPA)を使用しますか?

抽象レイヤーを使用すると、 JPQLので、方言はそれほど重要ではないし、多分in-memory H2データベースをあなたのテストに使うことができます。

ネイティブのPostgreSQL文を使用する必要がある場合は、別の方法として、Testcontainersを使用してドッキングされたデータベースを使用する方法があります。それはテストのスピードアップではありませんが、環境のセットアップ/クリーニングがより簡単になります。

+0

mybatisを使用してアクセスします –

+0

H2で動作するはずです:https://blog.lanyonm.org/articles/2014/04/21/spring-4-mybatis-java-config.html –

+0

H2と一緒に動作するのはなぜですか? MybatisはPostgreSQLのサブセット機能だけをサポートしていますが、これは偶然にH2と互換性がありますか? –

関連する問題