2016-10-30 7 views
-1

junitテストケースが実行されるときに実行時に@PropertySourceの値を変更する方法を教えてください。例えば、実行時に@PropertySource値を変更する

は私が

@PropertySource(value = "file:${app.deploy.env}/sample/mine.properties", ignoreResourceNotFound = true) 

value = "classpath:sample/mine.properties" 

JUnitテストを実行して、以下の値を置き換えたいです。

+0

なぜそれをしたいですか?コードを提供し、達成したいことを説明できますか? – developer

+0

うーん...これを意図した方法で使ってみませんか?例: 'value =" $ {protocol}:$ {app.deploy.env} /sample/mine.properties "'のようにすべての動的部分に式を入れ、環境に基づいて_file_と_classpath_の間で$ {protocol}の値を切り替えます。 – kaqqao

答えて

2

本当にしたいのですが、そうすることはお勧めできません。まず、値が入っているのはどれかPropertySourceです。あなたの例でその注釈があるので、おそらく最初のインスタンスとしてPropertySourceが普通のものに追加されます。

あなたがConfigurableEnvironmentように、その変更を行うと、環境上のgetMutablePropertySources()への国連の呼び出しを経由してPropertySourceを取得したい管理対象BeanにEnvironmentを注入することができます。

と言われています。どうして?あなたのアプリケーションのそのような基本的なプロパティを変更することは、あなたのアプリケーションで起こることをどのように表しているのでしょうか? Springランナーを使用しているようで、さまざまなテスト方法でさまざまな設定でアプリを起動したいと考えています。それがあなたがしたいことなら、ランナーを使わずに自分で文脈を管理してください。それは本当に難しいことではありません。

例えば、JMS-related testsは、さまざまなシナリオをテストするためにEnvironmentを変更しています。 easily load the context with a specific set of keys@After method makes sure to shutdown the context for each testとすることができます。

このパターンはSpring Bootでかなり使用します。事実として、私は数ヶ月間、私のtodoリストのすべてを容易にするJUnitルールを持っています。

+0

ありがとうございます。実際に私はリソースディレクトリの下にプロパティファイルを持っていて、dev、qaのような異なる環境のためのconfigディレクトリの下にあります。私のアプリケーションはdebianパッケージとしてビルドされており、別の環境にインストールしている間は起動スクリプトで春のブートjarを起動し、app.deploy.envなどのjava引数を渡します。だからjunitがjenkinsで動いているとき、私はリソースの下でプロパティファイルをロードし、単体テストを実行すると言ってみたいと思います。 – Harshana

+0

また、私はbuild引数mavenを使ってjava引数を渡すことができます。だから、私はapp.deploy.envを使って自分のアプリケーションをビルドすることを考えました。シンプルで、実行時に@PropertySourceの値を変更する必要はありません。 – Harshana

関連する問題