【问题标题】:How to mock MongoDB repository method in Java如何在 Java 中模拟 MongoDB 存储库方法
【发布时间】:2020-01-22 10:43:22
【问题描述】:

我试图在我的 JUnit 测试中模拟以下代码

requestData = requestRepository.findByRequestId(requestId);

通过做

@Mock
RequestRepository requestRepository;

@Mock
RequestData requestData;

Mockito.when(requestRepository.findByRequestId(requestId)).thenReturn(requestData);

但我没有返回模拟对象,而是得到了 null 值。 模拟 MongoDB 存储库方法的正确方法是什么。

【问题讨论】:

  • 这是正确的方法。可能您在测试执行期间的requestId 值与用于模拟调用的值不同。
  • 但不是提供模拟 requestData 对象,而是转到 mongodb 并从那里获取数据。我希望它发回模拟对象。
  • 我知道@Mock 仅在您调用MockitoAnnotations.initMocks(this); 或使用@RunWith(MockitoJUnitRunner.class) 时才有效。如果您的测试直接进入数据库是因为您可能正在使用 SpringRunner 运行,它正在启动您的完整应用程序,这实际上是一个集成测试
  • 是的,我正在使用 SpringRunner 所以有没有办法从数据库中获取模拟对象而不是实际数据。
  • @JuanRada '@MockBean' 工作!!谢谢。

标签: java spring-boot mockito


【解决方案1】:

当使用基于 SpringRunner 的测试时,使用 @MockBean 来声明您的上下文 bean 的模拟。

【讨论】:

    【解决方案2】:

    如果您不知道在这种情况下您的请求 ID 值(它可能是动态值),您可以使用 Mock.any(<?>.class)。

    示例:

    Mockito.when(requestRepository.findByRequestId(Long.class)).thenReturn(requestData);
    

    以上示例仅针对Long类型的requestId,如果需要整数则需要将类更改为Integer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2021-02-13
      • 2019-07-07
      • 2019-11-20
      相关资源
      最近更新 更多