7

デフォルトのプロパティ ファイルとオプションのオーバーライド ファイルの 2 つの場所を持つプロパティ プレースホルダーを定義するメインの app-context.xml があります。

<context:property-placeholder
        location="classpath:config.properties,${configOverride}"
        ignore-resource-not-found="true" />

オプションの上書き場所を使用すると、上書きする必要があるプロパティのみを含む別のプロパティ ファイル (例: "-DconfigOverride=file:/home/app/config.properties") を指定できます。

私の単体テストでは、app-context.xml をインポートするテスト コンテキストを使用しています。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:test-context.xml"})
public class UserServiceTest {
    ...
}

アプリケーション コンテキストが読み込まれる前に、アプリケーション内でシステム プロパティまたは環境変数を設定するにはどうすればよいですか? 可能であれば、コマンド ライン引数を指定することなく、すべてのテスト クラスで「-DconfigOverride=classpath:testConfig.properties」を設定するのと同じ効果を得たいと考えています。

4

4 に答える 4

16

もう 1 つの方法は、@BeforeClass アノテーション付きメソッドで環境プロパティを設定することです。これは、コンテキスト構成が発生する前に呼び出されます。

@BeforeClass
public static void setSystemProps() {
    System.setProperty("configOverride", "yourVal");
}
于 2013-03-07T01:43:21.907 に答える
6

を考えて、

  1. コンストラクター/初期化ブロックでSpringJUnit4ClassRunnerのシステム プロパティの 拡張と設定configOverride
  2. 次に、に渡しExtendedSpringJUnit4ClassRunnerます@RunWith
于 2012-05-30T18:38:52.240 に答える
3

これが私がやったことです-単体テストクラスを変更する必要はありませんでした。残念ながら、「configOverride」プロパティを設定せず (その方法の 1 つは AhamedMustafaM の回答を参照してください)、代わりに元のプロパティ プレースホルダー定義をオーバーライドしました (最初の試行が失敗した後に再試行し、動作するようにしました)。

次の行を testContext.xml に追加しました。

<!-- import the main app context -->
<import resource="classpath:appContext.xml" />

<!-- this is the line i added -->
<context:property-placeholder order="-999"
        location="classpath:testConfig.properties"
        ignore-unresolvable="true" />

order="-999" 属性に注意してください。これは、元のプロパティ プレースホルダー定義よりも優先されるようにするために使用されます。また、「ignore-unresolvable」を「true」に設定して、解決できないプロパティを元のプレースホルダー コンフィギュアラーに委譲します。

于 2012-05-30T23:01:12.690 に答える
0

私の問題は似ていましたが、spring.profiles.active環境変数を設定し@ActiveProfiles()たかったので、テスト自体に必要な値をスローするだけでよいことがわかりました。

于 2014-10-07T18:39:47.337 に答える