38

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

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

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

4

4 回答 4

42

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

Mockito.verify(mockMyObject).
  myMethod(
    Mockito.matches("(.*apple.*banana.*)|(.*banana.*apple.*)"
  )
);
于 2010-10-15T08:28:00.523 回答
20

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

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

从而提高可读性

于 2019-02-19T16:25:40.343 回答
15

我认为最简单的解决方案是多次调用 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"));
于 2014-12-05T10:15:36.097 回答
7

也许这不再相关,但我找到了另一种方法,遵循 Torsten answer 和 this other answer。就我而言,我使用了 Hamcrest Matchers

Mockito.verify(mockMyObject).myMethod(
   Mockito.argThat(Matchers.allOf(
      Matchers.containsString("apple"),
      Matchers.containsString("banana"))));
于 2019-08-12T22:55:55.157 回答