Spring:模仿豆子的正确方法

时间:2014-07-01 15:58:34

标签: java spring unit-testing mockito spring-test

我有:

这样的bean
<bean id="abstractBean" class="com.package.MyBean" abstract="true"/>

<bean id="heirBean" parent="abstractBean">
    <property name="someProperty" ref="anotherBean">
</bean>

问题:如何模仿heirBean?或者换句话说,如何模仿abstractBean


========================问题的可选部分================ ==============

我如何尝试[例外]:

<bean id="abstractBean" class="MockFactoryBean">
    <property name="type" value="com.package.MyBean"/>
</bean>

MockFactoryBean.java

public class MockFactoryBean<T> implements FactoryBean<T> {
    private Class<T> type;

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

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

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

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

}

问题:我无法设置模拟字段。

3 个答案:

答案 0 :(得分:1)

这个框架允许您为spring xml文件添加模拟功能 - https://bitbucket.org/kubek2k/springockito/wiki/Home

答案 1 :(得分:1)

通常,你不要模拟父bean,你要模拟你想要模拟的每个bean。

我理解你的问题:

  • 你有很多豆
  • 比使用一些常用功能
  • 您想要模拟该常用功能

虽然该理论通常不鼓励重构测试,但测试的特定需求允许您查看重构代码的方法。

我建议:

  • 将常用功能移至单独的界面+实施
  • 将该功能注入所有使用它的bean
  • 模拟该常用功能

因此,使用替换继承,这可以让您更灵活。

答案 2 :(得分:0)

我会使用spring的概要;从Spring 3.2.X开始,Spring中有“profile”概念,您可以使用它来模拟您的bean以获得测试范围