Ram*_*Ram 11 testing spring mocking javabeans context.xml
我正在编写一个集成测试,其中在启动期间初始化应用程序上下文xml.测试类中有几种测试方法,它们使用特定的bean"X"(已经在xml中定义).我的实际要求是仅为其中一种测试方法模拟bean X.
在测试方法中:我尝试使用ClassPathXMLApplicationContext创建一个单独的应用程序上下文,只使用模拟bean"M".
现在我有两个应用程序上下文(AC):1.在测试用例启动期间创建的一个(包含实际的bean X)和2.在测试方法中使用ClassPathXMLApplicationContext创建的一个(具有模拟bean M).
我想在AC:1中使用来自AC:2的模拟bean定义'M'替换AC:1中的实际bean定义'X'.
请问有人对此有所了解吗?
Jos*_*tin 17
ApplicationContext
除非您关闭它并再次刷新,否则没有一种明确的方法可以替换刷新的bean .
要模拟它,常见的方法是使用Proxy
要替换的bean,并在运行时更改目标.
您可以使用框架aop支持类轻松完成:
<bean id="realBean" class="RealClass" />
<bean id="mockBean" class="MockClass" />
<bean id="targetSource" class="org.springframework.aop.target.HotSwappableTargetSource">
<constructor-arg ref="realBean" />
</bean>
<bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource" ref="targetSource" />
</bean>
Run Code Online (Sandbox Code Playgroud)
@Test
public void testWithMockBean() {
Object real = targetSource.swap(mock);
....
// do your test work
...
targetSource.swap(real);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18032 次 |
最近记录: |