2016-08-26 5 views
2

ほとんどのDBテストではSpringを使用しないため、この方法でははるかに高速に開始できます。しかし、実際にSpring Bootアプリケーション全体を実行するスモークテストも実行したいと考えています。springとnon-springのテスト間でプロパティを共有する

そして、私は1つの場所でのDB接続パラメータを持っていると思います。これを行うには、私は2つのオプションを持っていると思う:

  1. シミュレート/春の構成に(定数との注釈がオプションではありません)私の非春のテスト
  2. が実行時に計算され、私の性質を注入してロード春のプロパティを再利用しますスモークテストで

任意のアイデアはどのようにそれらのいずれかを達成するために?あるいはもっと簡単な方法がありますか?

答えて

0

あなたは正確にあなたのapplication.propertiesからプロパティとして名前のシステムプロパティとして、データベース接続パラメータをエクスポートすることができます。 Springブートが外部化された設定を処理する方法のおかげで、それらの値はSpring設定のプロパティ(または使用するYAML)ファイルの値よりも優先され、非Springテストでシステムプロパティを使うだけです。

私はそれらのDBがあまりにも春スイートの一部を、テストすることを示唆しているが - あなたが実際にあなたが単一のテストを実行したときにのみ速度を得ます。異なる@ActiveProfilesアノテーションを使用する@DirtiesContextテストまたはテストがない限り、Springはアプリケーションコンテキストをキャッシュし、テストスイート全体で1回しか初期化しません。ここで

the official documentationからの引用:

ザ・春TestContextフレームワークには、一貫性のある春ApplicationContextsとWebApplicationContextsのロードだけでなく、これらのコンテキストのキャッシングを提供します。 Springのオーバーヘッドではなく、Springコンテナによってインスタンス化されたオブジェクトがインスタンス化するのに時間がかかるため、起動時間が問題になる可能性があるため、ロードされたコンテキストのキャッシュをサポートすることが重要です。たとえば、Hibernateマッピングファイルが50〜100個あるプロジェクトでは、マッピングファイルをロードするのに10〜20秒かかり、各テストフィクスチャで各テストを実行する前にそのコストがかかり、開発者の生産性を低下させるテスト全体が遅くなります。デフォルトで

は、一度ロードされ、構成ApplicationContextの各試験のために再利用されます。したがって、セットアップコストはテストスイートごとに1回だけ発生し、その後のテスト実行ははるかに高速です。このコンテキストでは、テストスイートという用語は、同じJVMで実行されるすべてのテストを意味します。たとえば、特定のプロジェクトまたはモジュールのAnt、Maven、またはGradleビルドから実行されるすべてのテスト。

+0

システムのプロパティは醜いですが、私は認めている、彼らは仕事を行う。私はあなたの答えを受け入れる前にいくつかの「侵略的ではない」解決策を待つでしょう。テストを春に移行することは選択肢ではありません。毎回〜200msと5秒です。それはTDDの大きな違いです – piotrek

+0

合意しましたが、私はより簡単な方法を見ていません。私自身はいつも[環境を準備したアプリケーションのリスナーを追加する方法](http://stackoverflow.com/a/38985183/4657798)を好みましたが、それはあなたのユースケースにとって少し重いです。あなたのケースでは、リスナーに渡す設定を保持するための静的なMapフィールドをどこかに持たなければならないので、システムプロパティはまだ侵略的ではない方法だと思います –

0

DB接続プロパティは、標準テストとSpringブートテスト用にロードできる専用のJava db.propertiesファイルに格納できます。

spring.config.locationを指定して、標準のSpringブートアプリケーションのプロパティファイルに加えて、db.propertiesをロードするように指示することができます。春のブートリファレンスマニュアルの

Application property filesセクションでは、あなたが必要とする必要があるすべての詳細を提供します。

関連する問題