使用 FactoryBean 注入模拟对象

Injecting Mocked objects using FactoryBean

我有一个 FactoryBean (Spring) 定义如下:

public class AMockFactoryBean extends EasyMockFactoryBean<A>{

    public AMockFactoryBean() {
        super(A.class);
    }

    @Override
    public A getObject() throws Exception {
        MockA a= new MockA();
        a.setB(createMock(B.class));
        return new MockA();
    }
}

class A 有一个自动装配的 B 类型对象:

public abstract class A {

    @Autowired
    protected B b;

}

MockA 实现了一些抽象 classes,而 EasyMockFactoryBean 使用了 Spring FactoryBean 方法。

在我的 app.xml 配置中我有:

<bean id="mockedA" class="AMockFactoryBean" />

我的测试class:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:testContext.xml")
public class ATest {

    @Autowired
    private A mockedA;

}

结果:ATest 中的 mockedA 已正确自动装配,但自动装配字段 A.b 已被 Spring 设置为 null。在调试模式下,我看到了如何调用 AMockFactoryBean 中的 getObject() 以及如何为 mockedA 提供 EasyMock 的 Mock 实例。但是当调试器跳转到ATestclass时,mockedA.b为null。为什么?

你return return new MockA(); 而不是一个。你的代码应该是 @Override public A getObject() throws Exception { MockA a= new MockA(); a.setB(createMock(B.class)); return a; }