模拟春豆 [英] Mocking Spring beans

查看:77
本文介绍了模拟春豆的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想继续这个问题.

这些答案 foo bar 正是我所需要的.

These answers foo and bar are exactly what I would need.

但是对于 bar 示例,春天没有不能推断出从通用嘲笑()方法返回的bean的类型.但实际上,它与MockFactoryBean情况完全相同,可以正常工作.

But for the bar example spring doesn't infer the type of bean that is returned from generic mock() method. But actually it's exactly the same as in the MockFactoryBean case, that is working.

class MockFactoryBean<T> implements FactoryBean<T> {

    private Class<T> type;

    public void setType(final Class<T> type) {
        this.type = type;
    }

    @Override
    public T getObject() throws Exception {
        return (T) Mockito.mock(type);
    }

    @Override
    public Class<T> getObjectType() {
        return type;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

<bean id="mockFactory" name="someType" class="com.example.MocksFactory" >
    <property name="type" value="com.example.SomeType" />
</bean>

使用org.mockito.Mockitomock()工厂方法的操作无效

BUT using org.mockito.Mockito and mock() factory method doesn't work

<bean id="dao" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="com.example.SomeType" /> 
</bean> 

在自动装配时,没有一个匹配类型为[com.example.SomeType] ...的bean.

and one gets No matching bean of type [ com.example.SomeType ] ... when Autowiring.

@自动连线 public SomeType someType;

@Autowired public SomeType someType;

那是为什么?

使用MockFactoryBean的方式非常不方便,因为如果必须模拟许多bean,最终结果是这样的:

the way with MockFactoryBean is quite inconvenient because if you have to mock many beans, you end up like this :

<bean id="mockFactory1" name="metadataExtractor" class="tests.base.MocksFactory" >
    <property name="type" value="processing.MetadataExtractor" />
</bean>
<bean id="mockFactory2" name="fileValidator" class="tests.base.MocksFactory" >
    <property name="type" value="validation.file.FileValidator" />
</bean>
<bean id="mockFactory3" name="documentMatcher" class="tests.base.MocksFactory" >
    <property name="type" value="validation.matching.DocumentMatcher" />
</bean>
<bean id="mockFactory4" name="uploadMatcher" class="tests.base.MocksFactory">
    <property name="type" value="validation.matching.UploadMatcher" />
</bean>
<bean id="mockFactory5" name="tempFileLocalService" class="tests.base.MocksFactory">
    <property name="type" value="service.TempFileLocalService" />
</bean>
<bean id="mockFactory6" name="orderLocalService" class="tests.base.MocksFactory">
    <property name="type" value="service.OrderLocalService" />
</bean>
<bean id="mockFactory7" name="counterLocalService" class="tests.base.MocksFactory">
    <property name="type" value="service.CounterLocalService" />
</bean>

因为没有id&名称,它不能推断类型.

Because without id & name it doesn't infer the type.

推荐答案

当XML文件应与标准spring/mockito jar一起使用时,您可以使用ProxyFactoryBean并与自动装配一起使用(在Spring 2.5上进行测试).

When XML file should work with standard spring/mockito jars you can use ProxyFactoryBean and it works with autowiring (tested on Spring 2.5).

<bean id="dao" class="org.springframework.aop.framework.ProxyFactoryBean">
   <property name="target"> <bean class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.package.Dao" /> </bean> </property>
   <property name="proxyInterfaces"> <value>com.package.Dao</value> </property>
</bean> 

这篇关于模拟春豆的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆