Mic*_*les 8 java spring unit-testing junit4 spring-aop
我知道有类似的问题,例如在这里,但是做了搜索,我找到了一个解决方案,我在这里更开心
但我唯一的问题是,我不确定如何实现这个解决方案.
我希望能够做的是通过HotswappableTargetSource覆盖我的应用程序上下文中的选择bean的bean定义和我的测试版本,然后运行测试.
然后,对于每个测试用例,我想指定哪些bean我想要热插拔,然后每个测试必须能够创建自己的模拟版本并交换它们,并能够再次交换回来.
我能够获得运行测试的应用程序上下文,但我不知道如何配置bean可热插拔.我知道如何在使用xml配置bean时这样做,但我不想回到使用xml来配置bean.
更新:有一个库可以做到!
https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations
解决方案如下:
您需要更改应用程序的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>
Run Code Online (Sandbox Code Playgroud)
因此,需要对被测系统进行更改.
在您的测试中,代码将如下所示:
@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
}
}
Run Code Online (Sandbox Code Playgroud)