injecting mock beans into spring context for testing

三世轮回 提交于 2019-11-30 04:00:54

UPDATE: There's a library that does it!

https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations

The solution is as follows:

You will need to change the spring context of your application to proxy the bean you want to swap:

<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 is the proxy onto this beanSwap.
  • beanSwappable is the bean which you reference when you want to swap the bean
  • beanToSwap is the default implementation of the bean

Thus a change to the system under test is necessary.

And in your test the code will look like:

@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

    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!