java - 验证特定方法是否不再有交互

标签 java mockito

我想做:检查 error 是否使用特定参数调用一次,但我不关心是否在同一个模拟上调用其他方法。

final Logger logger = mock(Logger.class);

//code under test
logger.debug("Something");//I don't care if it's here
logger.error("Boo");// must be one
//logger.error("Baa");// must fail if un-comment
logger.info("Stuff");//I don't care if it's here


//assertions
verify(logger, times(1)).error("Boo");
???verify(logger, never()).error(anyString());// Wrong solution
???verifyNoMoreInteractions(logger);// Wrong solution

换句话说,我想验证如何报告错误,但我不介意调试和信息。

我该怎么做?

最佳答案

一般情况

如果您想检查是否确实收到 x 个错误,但不关心错误中的文本:

verify(logger, times(x)).error(anyString());

如果您想检查是否总共收到 x 个错误,并且 y 应该包含文本 fooz 应包含文本 bar:

verify(logger, times(x)).error(anyString());
verify(logger, times(y)).error("foo");
verify(logger, times(z)).error("bar");
// ... (potentially other cases)

上下文

因此,对于您提供的示例,如果您不关心错误文本,它看起来像:

verify(logger, times(1)).error(anyString());

如果您确实关心错误文本(即:您想要 1 个“Boo”,以及 1 个总错误):

verify(logger, times(1)).error("Boo");
verify(logger, times(1)).error(anyString());

正如 Jeff 指出的那样,如果您只查找一次出现的情况,则可以忽略计数参数。

关于java - 验证特定方法是否不再有交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38208676/

相关文章:

java - 使用 Mockito 模拟重载方法

java - 如何在 JUnit 和 Mockito 中模拟 ResultSet 以不返回 null

Java Mockito.when 以 StringBuilder 作为参数失败

java - 当测试一个方法时,你可以模拟该方法引用的单例变量吗?

scala - flinks DataStream 的模拟对象

java - Android:使用 GSON 到对象的 JSON 失败

java - 如何在java中使用PrinterJob通过epl打印条码

java - 如何使用spring-data保存实体的子实体

java - 逐个字符串比较文件

java - 在Java中以更简洁的方式实例化 map