Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Mockito检查参数是否包含两个子字符串?_Java_Unit Testing_Mockito - Fatal编程技术网

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

Java 如何使用Mockito检查参数是否包含两个子字符串?,java,unit-testing,mockito,Java,Unit Testing,Mockito,我的测试中有一行代码,当前看起来像: Mockito.verify(mockMyObject).myMethod(Mockito.contains("apple")); 我想修改它以检查参数是否同时包含“apple”和“banana”。我该怎么做呢?只需使用Mockito.matches(String),例如: Mockito.verify(mockMyObject). myMethod( Mockito.matches("(.*apple.*banana.*)|(.*banana

我的测试中有一行代码,当前看起来像:

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"));

由于Java 8和Mockito 2.1.0,可以按如下方式使用流:

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

因此,提高可读性

也许这不再相关,但我找到了另一种方法,遵循托尔斯滕的答案和其他答案。就我而言,我用的是汉克雷斯特


查看本文中的工作示例。虽然这段代码可能会回答这个问题,但提供有关它如何以及为什么解决这个问题的附加上下文将提高答案的长期价值。谢谢-这看起来是一个有用且更为最新的答案。9年前我问过这个问题,因此值得一提的是Java的版本(例如Java8流)和/或Mockito(文档提到这个接口在2.1.0中发生了变化:)。由于Java9,它可以写得更短:
Mockito.argThat(s->List.of(“apple”,“banana”)。contains)
。我不同意您的回答,因为可能是不同的方法调用,您无法确定。仅供参考,我没有否决你的答案。
Mockito.verify(mockMyObject).myMethod(
   Mockito.argThat(Matchers.allOf(
      Matchers.containsString("apple"),
      Matchers.containsString("banana"))));