Java 将模拟bean注入到spring上下文中进行测试
我知道有人问过类似的问题,例如,但经过搜索,我找到了一个我更满意的解决方案 然而,我唯一的问题是,我不确定如何实现这个解决方案 我希望能够通过HotSwapableTargetSource在我的测试版本中覆盖应用程序上下文中选择bean的bean定义,然后运行测试 然后,对于每个测试用例,我想指定哪些bean是可热插拔的,然后每个测试必须能够创建自己的模拟版本并将其交换,并且能够再次交换Java 将模拟bean注入到spring上下文中进行测试,java,unit-testing,spring,junit4,spring-aop,Java,Unit Testing,Spring,Junit4,Spring Aop,我知道有人问过类似的问题,例如,但经过搜索,我找到了一个我更满意的解决方案 然而,我唯一的问题是,我不确定如何实现这个解决方案 我希望能够通过HotSwapableTargetSource在我的测试版本中覆盖应用程序上下文中选择bean的bean定义,然后运行测试 然后,对于每个测试用例,我想指定哪些bean是可热插拔的,然后每个测试必须能够创建自己的模拟版本并将其交换,并且能够再次交换 我能够获得运行测试的应用程序上下文,但我不知道如何将bean配置为可热交换的。我知道如何使用xml配置bea
我能够获得运行测试的应用程序上下文,但我不知道如何将bean配置为可热交换的。我知道如何使用xml配置bean,但我不想再使用xml配置bean。更新:有一个库可以做到这一点 解决办法如下: 您需要更改应用程序的spring上下文以代理要交换的bean:
<bean id="beanSwappable" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="beanSwap" />
</bean>
<bean id="beanSwap" class="org.springframework.aop.target.HotSwappableTargetSource">
<constructor-arg ref="beanToSwap" />
</bean>
- beanSwap是此beanSwap的代理
- beanSwappable是您在交换bean时引用的bean
- beanToSwap是bean的默认实现
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "test.xml", "spring.xml" })
public class Test {
@Resource(name="beanSwappable")
Bean b;
@Resource(name = "beanSwap")
HotSwappableTargetSource beanSwap;
public void swap() {
Bean b = << create mock version >>
beanSwap.swap(b);
// run test code which
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(位置={“test.xml”,“spring.xml”})
公开课考试{
@资源(name=“beanSwappable”)
豆b;
@资源(name=“beanSwap”)
热插拔TargetSource beanSwap;
公共无效掉期(){
豆b=>
beanSwap.swap(b);
//运行测试代码
}
}
但是现在有一个库可以很容易地完成这项工作。。。