java - 验证是否使用 mockito 调用了三种方法之一

标签 java unit-testing mockito

我有如下三种方法:

public void method1(String str){
    ...
}

public void method1(String str, String str2, String str3){
    ...
}

public void method1(String str, String str2, Object[] objs, String str3){
    ...
}

我想检查 Mockito 是否调用了这些方法中的任何一个,所以我尝试使用 anyVararg Matcher:

verify(foo).method1(anyVararg());

但这不会编译“错误类型中的方法 method1(String, String) 不适用于参数 (Object)”

我有两个问题:

  1. 我该如何解决这个问题?
  2. 有什么方法可以检查是否调用了两个方法中的任何一个?想象一下,我有另一个 methods 称为 method2 和 method3。我想检查是否调用了其中任何一个(但至少调用了一个)。

谢谢。

最佳答案

您可以通过使用 Answer 在调用任何方法时递增计数器来完成此操作。

private Answer incrementCounter = new Answer() {
    public Object answer(InvocationOnMock invocation) throws Throwable {
        counter++;
        return null;
    }        
};

请注意,您需要 stub 所有方法。方法的唯一性基于其签名,而不仅仅是方法名称。两个同名的方法仍然是两个不同的方法。

doAnswer(incrementCounter).when(mockObj.method1(anyString()));
doAnswer(incrementCounter).when(mockObj.method1(anyString(), anyString()));
doAnswer(incrementCounter).when(mockObj.method2(anyString()));

参见doAnswer 的文档here .

关于java - 验证是否使用 mockito 调用了三种方法之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594645/

相关文章:

java - Mockito 验证匹配 数组的可选

java - 使用 PowerMock 测试 Thread.sleep 不起作用

java - 什么是用 Java 制作等高线图的好(免费)库?

java - 是否在被视为组合的方法内从另一个类创建对象

c# - 如何将整个类(class)标记为 "Inconclusive"?

unit-testing - 使用 Mockito 模拟一个方法

java - mockito 未模拟的 Autowiring bean 上的空指针

java - maven-clean-plugin 不删除文件

java - springboot 应用程序在 Angular 上出现 fsevents 错误

PHPUnit 检查方法返回类型