如何使用Mockito检查一个参数是否包含两个子字符串?

f5emj3cl  于 2022-11-08  发布在  其他
关注(0)|答案(5)|浏览(132)

我的测试中有一行,目前看起来像:

Mockito.verify(mockMyObject).myMethod(Mockito.contains("apple"));

我想修改它来检查参数是否同时包含"apple""banana"。我该怎么做呢?

b1payxdu

b1payxdu1#

只需使用Mockito.matches(String),例如:

Mockito.verify(mockMyObject).
  myMethod(
    Mockito.matches("(.*apple.*banana.*)|(.*banana.*apple.*)"
  )
);
kokeuurv

kokeuurv2#

从Java 8和Mockito 2.1.0开始,可以按如下方式使用流:

Mockito.verify(mockMyObject).myMethod(
    Mockito.argThat(s -> s.contains("apple") && s.contains("banana"))
);

因此提高了可读性

2hh7jdfx

2hh7jdfx3#

我认为最简单的解决方案是多次调用verify():

verify(emailService).sendHtmlMail(anyString(), eq(REPORT_TITLE), contains("Client response31"));
verify(emailService).sendHtmlMail(anyString(), eq(REPORT_TITLE), contains("Client response40"));
verify(emailService, never()).sendHtmlMail(anyString(), anyString(), contains("Client response30"));
pkwftd7m

pkwftd7m4#

也许这已经不相关了,但是我找到了另一种方法,按照Torsten的回答和这个answer。在我的例子中,我使用了Hamcrest Matchers

Mockito.verify(mockMyObject).myMethod(
   Mockito.argThat(Matchers.allOf(
      Matchers.containsString("apple"),
      Matchers.containsString("banana"))));
mwyxok5s

mwyxok5s5#

您也可以使用Mockito的AdditionalMatchers

Mockito.verify(mockMyObject).myMethod(
AdditionalMatchers.and(Mockito.contains("apple"), Mockito.contains("banana")));

更多信息和(T,T)

相关问题