使用 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;
}
我有一个 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;
}