【问题标题】:How to mock a method that returns `Mono<Void>`如何模拟返回`Mono<Void>`的方法
【发布时间】:2019-07-23 19:58:26
【问题描述】:

如何模拟返回Mono&lt;Void&gt;的方法?

我有这个方法返回Mono&lt;Void&gt;

public Mono<Void> deleteMethod(Post post) {

        return statusRepository.delete(post);
    }

在我的测试课中,我想做这样的事情

given(statusRepository.delete(any(Post.class))).willReturn(Mono.empty());

有没有更好的方法来做到这一点?

有人可以帮我吗?

谢谢。

【问题讨论】:

  • 您是否面临任何具体问题?
  • 不,最初我得到一个空单声道错误,我认为 Mono.empty() 是导致错误的原因,但其他原因是空单声道的原因。现在,我只是想确保我所做的是正确的。
  • 作为选项,您可以使用 PublisherProbe probe = PublisherProbe.empty();探测。单核细胞增多症();来自projectreactor.io/docs/core/release/reference/… 的示例
  • 发布您的测试用例,以便我们仔细查看并提出改进建议

标签: java unit-testing mockito reactive-programming spring-webflux


【解决方案1】:

这可以使用Mockito.when:

Mockito.when(statusRepository.delete(any(Post.class)).thenReturn(Mono.empty());

...调用方法并验证...

Mockito.verify(statusRepository).delete(any(Post.class));

【讨论】:

    【解决方案2】:

    我也可以在不使用Mono.empty 的情况下做到这一点,因此反应链将通过创建一个 void 类型的模拟对象来完成。下面是一个代码示例(用 Kotlin 编写并使用 mockito-kotlin,但也应该适用于 mockito):

    val mockVoid: Void = mock()
    
    whenever(statusRepository.delete(any(Post::class.java)).thenReturn(mockVoid)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2020-12-07
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多