当前位置: 首页 > 知识库问答 >
问题:

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

慕容玉书
2023-03-14

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

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

我的测试单元:

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个答案

商宝
2023-03-14

我必须在开始时添加以下内容:

@BeforeEach
void setup() {
     Mockito.reset(...mockBeans);
     ...
}
 类似资料:
  • 我正在尝试试驾我正在对我的Android服务进行的一系列更改()-我正在使用Dagger和Robolectric,我需要用一些模拟来替换服务中的字段注入类,以缩小测试范围…使它(稍微)更像“单元”。 我在我的中插入

  • 我正在使用mocks来模拟那些需要几个小时才能建立起来的对象,因为我的团队似乎很喜欢极深的聚合对象。 谢谢!

  • 我知道这个问题被问了很多次,但我听了很多答案,还是没有用 我的代码出了什么问题?我错过什么了吗?

  • 为了获得可重用和可测试的rxjava代码,我使用ObservableTransformers分离了代码的各个部分。它在生产中工作得很好,但是测试它并不像预期的那么容易,因为我似乎无法模拟那些观察到的ransformers。 when(observableTransformer.apply(any())).thenreturn(observable.just(“mockedtext”)); 一旦调用

  • 我还没有看到这个问题的答案能解决我的问题。 我有一个服务类,它是用一个存储库和一个Orika MapperFacade构建的。在测试中,我正在安排存储库调用返回的实体列表。my doReturn(testList).when(testRepository).findAllBy...似乎正在工作。我的实际结果列表包含我在模拟列表中指定的相同数量的元素(.size()),但是这些值都是空的。我对Spr

  • 我放了一个简单的重试,因为操作很少会失败。下面是简化的代码。方法< code>putObject可能会意外引发异常,在这种情况下,重试应该允许再次调用此方法。有可能为此编写一个JUnit测试吗?我知道使用Mockito library我们可以强制抛出一个调用方法的异常,但是如何强制这个异常只抛出一次呢? 测试类: