2010-07-01 82 views
3

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

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

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

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

但以春拒绝解决${buildEnvironment}

我也Maven中使用systemPropertyVariables设置一个名为buildEnvironment属性,然后我试图在我的Spring bean定义引用尝试。在这一点上,我没有想法。我确信有一个很好的,直接的方法来做到这一点,但我无法弄清楚。

任何意见将不胜感激。

+0

你见过这个相关的问题与不同的答案http://stackoverflow.com/questions/3076466/maven-using-different-spring-properties-for-integration-tests – JoseK 2010-07-07 08:40:42

+0

我也无法得到PropertyPlaceholderConfigurer看到与additionalClasspathElements一起添加的资源。有没有人有任何想法,为什么这不起作用? – Lyle 2012-10-31 16:02:46

回答

1

您可以使资源的筛选和创建Maven的属性:

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

<properties> 
    <buildEnvironment>yourValue</buildEnvironment> 
</properties> 

$ {buildEnvironment}在Spring的配置将被解析为 “yourValue”(假设它是在src /测试/资源/)

+0

这类作品,尽管如果你想为测试阶段工作,你必须使用而不是。 不幸的是,没有使用配置文件,似乎没有办法为集成测试和单元测试设置属性。这是可以接受的,但不是我所希望的。 :) – organicveggie 2010-07-05 17:20:30