在我的webapplication中,applicationContext中有两个数据源bean,一个用于real-env,另一个用于执行测试。 dataSource对象注入一个DAO类。使用Spring配置文件如何配置测试数据源应该在DAO中注入运行Test(JUnit),并且应该在DAO中注入real-env dataSource,同时将代码部署到real-env?
答案 0 :(得分:1)
实际上有两种方法可以实现目标:
用于真正的环境:
<!-- default-spring-config.xml -->
<beans>
...other beans goes here...
<bean id="datasource" class="xx.yy.zz.SomeDataSourceProvider1" />
</beans>
用于测试:
<!-- test-spring-config.xml -->
<beans>
...other beans goes here...
<bean id="datasource" class="xx.yy.zz.SomeDataSourceProvider2" />
</beans>
在您的web.xml中指定 default-spring-config.xml 作为spring在运行时使用的 contextConfigLocation :
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/default-spring-config.xml</param-value>
</context-param>
最后在 ContextConfiguration 中为测试指定 test-spring-config.xml :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test-spring-config.xml")// it will be loaded from "classpath:/test-spring-config.xml"
public class YourClassTest {
@Autowired
private DataSource datasource;
@Test
public void your_function_test() {
//use datasource here...
}
}
首先将这些行添加到web.xml中,让Spring知道默认配置文件(real-env):
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>default</param-value
</context-param>
现在进入Spring配置文件(一个配置文件)创建两个不同的数据源:
<beans xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="...">
...other beans goes here...
<beans profile="default">
<bean id="defaultDatasource" class="xx.yy.zz.SomeDataSourceProvider1" />
</beans>
<beans profile="test" >
<bean id="testDatasource" class="xx.yy.zz.SomeDataSourceProvider2" />
</beans>
</beans>
然后使用 ActiveProfiles :
将DataSource注入您的测试类@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@ActiveProfiles("test")
public class YourClassTest {
@Autowired
private DataSource datasource;
@Test
public void your_function_test() {
//use datasource here...
}
}
来源:https://spring.io/blog/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles