6

src/test/resourcesフォルダーにある同名のテスト プロパティ ファイルで、オーバーライドしたいプロパティのみを指定したいと考えています。

もう少し詳しく...

Maven レイアウトには、使用するデプロイされた値を含むプロパティ ファイルがあります (例: input.uri )。

src/main/resources/app.properties: 
input.uri=jms:topic:in
app.name=foo_bar

このファイルのプロパティは、property-placeholder によってcontext.xmlファイルに読み込まれます。

src/main/resources/META-INF/spring/context.xml:
<context:property-placeholder properties-ref="springProperties"/>
<util:properties id="springProperties" local-override="true" location="classpath:app.properties" />

src/test/resourcesフォルダーに app.properties という同じ名前のテスト プロパティ ファイルがあり、input.uri定義junitテストで使用する定義にオーバーライドします。(注、app.nameは変更されません)。

src/test/resources/app.properties: 
input.uri=seda:in

プロパティがsrc/main/resources/app.propertiesファイルから読み込まれるが、 src/test/resources/app.propertiesファイルで定義されたすべてのプロパティが読み込まれるように、junit テストおよび/またはテスト context.xml ファイルをどのように記述しますか? src/main/resources/app.propertiesファイル内のものをオーバーライドしますか? src/mainファイルまたはsrc/test junit テスト ファイルのいずれかに 2 つの異なるファイルをロードしていることが明らかでない限り、プロパティ プレースホルダーでクラスパスを検索して正しい値を選択する必要があります。

4

1 に答える 1

4

ただし、別の名前を指定する必要があります。メインとテストの両方のプロパティが同じ名前の場合、どちらか一方のプロパティ全体が有効になります。

代わりに、このようなアプローチが私にとってはうまくいきました:

あなたsrc/main/resources/META-INF/spring/context.xmlはこれを行います:

<context:property-placeholder location="classpath:app.properties" local-override="true" properties-ref="springProperties"/>
<util:properties id="springProperties">
</util:properties>

ファイルtest-context.xml内:

<import resource="classpath:/META-INF/spring/context.xml">
<util:properties id="springProperties"> <!-- or refer to a overriding file -->
    <prop key="input.uri">seda.in</prop>
</util:properties>

これにより、元のファイルからオーバーライドされていない値を維持しながら、プロパティがオーバーライドされます。

于 2012-08-21T20:04:50.140 に答える