【发布时间】:2012-09-16 17:34:08
【问题描述】:
我发现在调用 factoryBean.getObject() 之前对 bean 进行后处理是不可能的。 'resultingBean' 是一些在开始时初始化的 bean 的依赖项,因此它首先被实例化。请参阅在“MyFactoryBean”中构造“resultingBean”之前,我需要“myBeanPostProcessor”来处理“myBean”。 lazy-init 和 depends-on 都没有帮助。无论如何,'MyFactoryBean.getObject()' 总是首先被调用。
<bean id="myBean" class="example.MyBean" />
<bean id="myBeanPostProcessor" class="example.MyBeanPostProcessor" />
<bean id="resultingBean" class="example.MyFactoryBean" depends-on="myBean"/>
知道如何处理这个问题吗?我故意选择 BeanPostProcessor 是因为此要求应处理在 junit @Before 方法之前设置 mocito 模拟...问题是在 @Before 方法中设置这些模拟为时已晚,因为您需要在上下文时使用它们初始化。
没有很多方法可以做到这一点,包括 ExecutionListeners、ContextLoaders、BeanFactoryPostprocessor、Runner 等等。
我正在使用 springockito 即时模拟我的 bean。
这是完美的弹簧测试框架的一个小缺点。
【问题讨论】:
-
MyBean的构造函数中可以不做处理吗?还是在 setter 方法中?
-
我不行,myBean其实是mock的对象。我试图模拟的 bean。在 factoryBean.getObject() 调用时,'myBean' 已经在 beanFactory 中。
-
如果我需要嘲笑任何东西,我倾向于只是指指点点然后大笑。
标签: java spring junit mockito springmockito