Spring + Maven:用于单元测试和集成测试的单独属性文件

时间:2010-07-01 23:47:30

标签: java unit-testing spring maven-2 properties

我正在使用Spring 2.5.6并使用Maven 2.2.1构建我的项目。我们在Spring中使用PropertyPlaceholderConfigurer bean来加载用于配置数据库之类的东西的属性。很标准的东西。我们还有两组不同的测试:单元测试和集成测试。

我希望能够使用不同的属性文件来为两种不同类型的测试配置不同的数据库URL。例如,我希望单元测试使用localhost数据库和集成测试来使用mydatabase.example.com数据库。

我尝试了几种变体,将属性文件放在单独的子目录中(一个用于单元测试,一个用于集成测试)。从那里开始,我尝试过使用additionalClasspathElements的{​​{1}}标记,但这似乎根本不起作用。我尝试使用maven-failsafe-plugin将文件复制到maven-antrun-plugin,但在我运行target/classes时没有触发。

我还尝试在maven中使用mvn verify -Dtest=sometest来设置一个名为systemPropertyVariables的属性,然后我尝试在我的Spring bean定义中引用它:

buildEnvironment

但是Spring拒绝解决<property name="locations"> <value>classpath:${buildEnvironment}/my-test.properties</value> </property> 。在这一点上,我没有想法。我确信有一个很好的,直截了当的方法,但我无法理解。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您可以启用资源过滤并创建maven属性:

<build>
  <resources>
    <resource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

<properties>
   <buildEnvironment>yourValue</buildEnvironment>
</properties>
Spring配置中的

$ {buildEnvironment}将被解析为“yourValue”(假设它位于src / test / resources /下)