在测试之间重置作为Spring Bean提供的Mockito模拟吗?

Phi*_*lip 5 spring mockito

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

问题是Mockito不会在测试之间重置模拟,因此我无法正确验证其上的方法调用。

我的测试单元:

public class MyClass {
  @Resource
  SomeClientClass client;

  public void myMethod() {
    client.someMethod();
  }
}
Run Code Online (Sandbox Code Playgroud)

单元测试课:

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

  @Test
  public void verifySomething() {
    // ...
    Mockito.verify(client).publish();
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,

@Configuration
public class UnitTestConfig {
  @Bean
  SomeClientClass client() {
    return Mockito.mock(SomeClientClass.class);
  }
}
Run Code Online (Sandbox Code Playgroud)

尽管我可以通过在测试之间手动重置模拟来解决这个问题,但是我想知道是否存在更干净/更惯用的方法。

小智 5

我必须在开始时添加这个:

@BeforeEach
void setup() {
     Mockito.reset(...mockBeans);
     ...
}
Run Code Online (Sandbox Code Playgroud)