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

标签 spring mockito

我有一个使用 Spring 的依赖注入(inject)的 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);
  }
}

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

最佳答案

我不得不在开始时添加这个:

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

关于spring - 在测试之间重置作为 Spring bean 提供的 Mockito 模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34934257/

相关文章:

java - Spring Cloud承载头透传

java - Mod_Cluster LifecycleListeners Spring Boot

java - @Async 在 REST 类中不起作用

java - 如何在类测试中模拟数据源 spring bean

java - Spring MVC Controller 测试 PUT

html - Spring Web 开发建议

java - 为什么 Spring 中的 RestTemplate 必须传递参数名称

java - 如何在 OkHttp 中测试 IOException 情况?

java - 我应该对哪些方法进行 JUnit 测试 - 如何模拟具有许多依赖项的方法

junit - 如何模拟 SecurityContextHolder.getContext().getAuthentication().getCredentials()