如何从jUnit测试启动maven过滤?

时间:2011-10-25 15:02:08

标签: java maven-2 junit intellij-idea

情况:我有一个MyController类,它可以与一些外部Web服务一起使用。

public class MyController {
    private String integrationWebServiceURL;
}

此类Web服务URL在配置控制器bean的描述符( applicationContext.xml

期间传递
<bean id="myController"  class="com.mypath.MyController">
    <property name="integrationWebServiceURL" value="${integration.web.service.url}"/>
</bean>

值是动态的,实际值存储在属性文件 application.properties

integration.web.service.url=${pom.integration.web.service.url}

但它不是结束 - 真实价值存储在maven项目文件( pom.xml )中,过滤= true。

<pom.integration.web.service.url>http://mywebservices.com</pom.integration.web.service.url>

因此,当我们使用 mvn install test 时,将pom.xml中的值复制到application.properties中的相应占位符,然后我的类的测试工作正常。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext.xml"})
public class MyControllerTest {

}

问题:我需要从IDE启动测试,以便能够使用不同的设置并使用IDE的调试功能。但是,如果我简单地从IDE启动此测试而没有初步的Maven构建 - 比我的web服务地址将简单地从application.properties获取并等于“$ {pom.integration.web.service.url}”(例如,Maven过滤的过程没有测试前没事。如何调整Maven,Spring或jUnit以从pom.xml中提取我的值?

注意:我知道我可以在test-class使用的application.properties或applicationContext.xml文件中显式设置此值,但我需要从pom.xml中提取此值。 / p>

2 个答案:

答案 0 :(得分:0)

只需使用maven运行,如:

mvn test

然后所有人都应该过滤pom变量。 您可以拥有特定属性文件的testResources。或者是applicationContext-test.xml。

答案 1 :(得分:0)

最佳解决方案是使用支持Maven的IDE,并在必须构建源时运行mvn copy-resources。对于Eclipse,请尝试m2e,对于IDEA,Maven插件也应该这样做。

如果由于某种原因这不是一个选项,您可以手动运行目标,例如在通用测试代码中的静态代码块中(因此它总是只执行一次):

static {
    Process p = Runtime.getRuntime().exec( "mvn copy-resources" );
    IOUtils.copy( p.getInputStream(), System.out );
    p.waitFor();
}