在测试之间重置Mockito模拟,作为Spring bean提供?

时间:2016-01-21 21:02:20

标签: spring mockito

我有一个使用Spring依赖注入的Java应用程序。我想模拟一个bean,并验证它是否接收到某些方法调用。

问题是Mockito没有在测试之间重置模拟,所以我无法正确验证方法调用。

我的被测单位:

public class MyClass {
  @Resource
  SomeClientClass client;

  public void myMethod() {
    client.someMethod();
  }
}

单元测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = UnitTestConfig.class)
public class MyClassTest {
  @Resource
  SomeClientClass client;

  @Test
  public void verifySomething() {
    // ...
    Mockito.verify(client).publish();
  }
}

最后,

@Configuration
public class UnitTestConfig {
  @Bean
  SomeClientClass client() {
    return Mockito.mock(SomeClientClass.class);
  }
}

虽然我可以通过在测试之间手动重置模拟来解决这个问题,但我想知道是否有更清洁/更惯用的方法。

1 个答案:

答案 0 :(得分:1)

我必须在开始时添加它:

@BeforeEach
void setup() {
     Mockito.reset(...mockBeans);
     ...
}