如果我使用如here所述的Springockito在我的spring上下文文件中创建一个mock,我该如何为它模拟一些行为?
我正在尝试做什么:
> ClassA正在测试中.
> ClassB在ClassA中自动装配.
> ClassB被Springockito嘲笑.
> ClassA需要ClassB在其PostConstruct中执行某些操作.
>我需要模拟ClassB才能做到这一点,因为它不能也不应该真的这样做.
在没有使用Springockito(直接使用Mockito)的情况下这样做是直截了当的,但我需要自动装配这些bean并在我的测试中使用Spring.任何帮助表示赞赏.
解决方法:
我对Springockito并不熟悉,但对于一些狭隘的案例来说它看起来很有趣 – 即集成测试只是一点点嘲弄.
无论如何,看起来对于一个简单的用例你扩展AbstractJUnit4SpringContextTests,你也可以在你的测试中自动装配ClassB,就像你在ClassA中一样.然后,您可以在setup方法中定义ClassB的预期行为.
但我认为您需要在设置方法中访问它之前为ClassB bean设置一些行为.在这种情况下,您可能需要另一个bean来设置ClassB以执行预期的行为.所以你的testContext.xml会有这样的东西:
<bean id="classA" class="com.jarvis.ClassA" depends-on="classBMockSetter" />
<mockito:mock id="classB" class="com.jarvis.ClassB" />
<bean id="classBMockSetter" class="com.jarvis.test.ClassBMockSetter">
<property name="classB" ref="classB" />
</bean>
ClassBMockSetter看起来像:
public class ClassBMockSetter {
private ClassB classB;
public void setClassB(ClassB classB) {
this.classB = classB;
given(classB.foo()).willReturn(true);
given(classB.bar()).willReturn(42);
}
}
我认为这样可行,但在那时,手动编写你的模拟ClassB是不是更容易?