情况:我有一个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>
答案 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();
}