我有:像这样的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;
}
}
问题:我无法设置mock的字段。
有一个框架允许您将mocking功能添加到spring xml文件中-https://bitbucket.org/kubek2k/springockito/wiki/Home
通常,您不模拟父bean,而是模拟要模拟的每个bean。
正如我理解你的问题:
- 你有很多豆子
- 而不是使用一些通用功能
- 你想模仿这种通用功能
虽然该理论通常不鼓励为测试进行重构,但测试的特定需求允许您了解重构代码的方法。
我建议:
- 将通用功能转移到单独的接口+实现
- 将该功能注入所有使用它的bean
- 模拟常见功能
因此,您将继承替换为用法,这使您具有更大的灵活性。
我会使用spring的概要文件概念;从spring3.2.X开始,spring中有"profile"概念,您可以使用它来模拟测试范围的bean