6

我只想在src/test/resources文件夹中的同名测试属性文件中指定要覆盖的属性。

再详细一点...

在 Maven 布局中,我有一个属性文件,其中包含要使用的部署值(例如input.uri)。

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

该文件的属性由属性占位符加载到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

您将如何编写 junit 测试和/或测试 context.xml 文件,以便从src/main/resources/app.properties文件加载属性,但在src/test/resources/app.properties文件中定义任何属性覆盖src/main/resources/app.properties文件中的那些?如果您在src/main文件或src/test junit 测试文件中加载两个不同的文件并不明显 - 我希望属性占位符搜索类路径并选择正确的值。

4

1 回答 1

4

但是,您必须提供不同的名称 - 如果 main 和 test 中的属性都具有相同的名称,则其中一个或另一个中的整个属性将生效。

相反,这样的方法对我有用:

在你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 回答