如何模拟Springockito模拟的行为?

如果我使用如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是不是更容易?

上一篇:java – 不能@InjectMocks属性调用Mockito的方法然后返回?


下一篇:java – Spring @Value注释不能与mockito mock一起使用