【问题标题】:Spring + Maven: separate property files for unit tests and integration testsSpring + Maven:用于单元测试和集成测试的单独属性文件
【发布时间】:2011-03-10 21:34:48
【问题描述】:

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

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

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

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

<property name="locations">
  <value>classpath:${buildEnvironment}/my-test.properties</value>
</property>

但是 Spring 拒绝解析 ${buildEnvironment}。在这一点上,我没有想法。我确信有一种很好、直接的方法可以做到这一点,但我想不通。

任何建议将不胜感激。

【问题讨论】:

  • 你有没有看到这个相关问题的不同答案stackoverflow.com/questions/3076466/…
  • 我也无法让 PropertyPlaceholderConfigurer 查看添加了附加类路径元素的资源。有谁知道为什么这不起作用?

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


【解决方案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/ 下)

【讨论】:

  • 这种工作,虽然你必须使用 而不是 如果你想为测试阶段工作。不幸的是,似乎没有办法在不使用配置文件的情况下为集成测试和单元测试设置不同的属性。这是可以接受的,但不是我所希望的。 :)
猜你喜欢
  • 2016-01-23
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多