Ответ 1
Просто используйте Mockito.matches(String)
, например:
Mockito.verify(mockMyObject).
myMethod(
Mockito.matches("(.*apple.*banana.*)|(.*banana.*apple.*)"
)
);
У меня есть строка в моем тесте, которая в настоящее время выглядит:
Mockito.verify(mockMyObject).myMethod(Mockito.contains("apple"));
Я хотел бы изменить его, чтобы проверить, содержит ли параметр "apple"
и "banana"
. Как я могу это сделать?
Просто используйте Mockito.matches(String)
, например:
Mockito.verify(mockMyObject).
myMethod(
Mockito.matches("(.*apple.*banana.*)|(.*banana.*apple.*)"
)
);
Я думаю, что самым простым решением является вызов функции 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"));
Отметьте эту статью Аргумент соответствия с Mockito для рабочего примера.
Mockito.verify(mockMyObject)
.myMethod(Mockito.argThat(s ->
s.contains("apple") && s.contains("banana"));
Возможно, это больше не актуально, но я нашел другой способ сделать это, следуя ответу Торстена и этому другому ответу. В моем случае я использовал Hamcrest Matchers
Mockito.verify(mockMyObject).myMethod(
Mockito.argThat(Matchers.allOf(
Matchers.containsString("apple"),
Matchers.containsString("banana"))));