我的测试中有一行,目前看起来像:
Mockito.verify(mockMyObject).myMethod(Mockito.contains("apple"));
我想修改它来检查参数是否同时包含"apple"和"banana"。我该怎么做呢?
"apple"
"banana"
b1payxdu1#
只需使用Mockito.matches(String),例如:
Mockito.matches(String)
Mockito.verify(mockMyObject). myMethod( Mockito.matches("(.*apple.*banana.*)|(.*banana.*apple.*)" ) );
kokeuurv2#
从Java 8和Mockito 2.1.0开始,可以按如下方式使用流:
Mockito.verify(mockMyObject).myMethod( Mockito.argThat(s -> s.contains("apple") && s.contains("banana")) );
因此提高了可读性
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"));
pkwftd7m4#
也许这已经不相关了,但是我找到了另一种方法,按照Torsten的回答和这个answer。在我的例子中,我使用了Hamcrest Matchers
Mockito.verify(mockMyObject).myMethod( Mockito.argThat(Matchers.allOf( Matchers.containsString("apple"), Matchers.containsString("banana"))));
mwyxok5s5#
您也可以使用Mockito的AdditionalMatchers:
AdditionalMatchers
Mockito.verify(mockMyObject).myMethod( AdditionalMatchers.and(Mockito.contains("apple"), Mockito.contains("banana")));
更多信息和(T,T)
5条答案
按热度按时间b1payxdu1#
只需使用
Mockito.matches(String)
,例如:kokeuurv2#
从Java 8和Mockito 2.1.0开始,可以按如下方式使用流:
因此提高了可读性
2hh7jdfx3#
我认为最简单的解决方案是多次调用verify():
pkwftd7m4#
也许这已经不相关了,但是我找到了另一种方法,按照Torsten的回答和这个answer。在我的例子中,我使用了Hamcrest Matchers
mwyxok5s5#
您也可以使用Mockito的
AdditionalMatchers
:更多信息和(T,T)