java - Mockito 在调用具有可变数量参数的方法时使用参数匹配器

标签 java mockito

我试图在 when 调用具有可变参数数量的方法(Java 中的 ... 东西)时使用参数匹配器,但没有成功。我的代码在下面,我还将列出我尝试使用来完成这项工作的所有行。

import static org.mockito.Mockito.*;

public class MethodTest {
    public String tripleDot(String... args) {
        String sum = "";
        for (String i : args) {
            sum += i;
        }
        System.out.println(sum);

        return sum;
    }

    public static void main(String[] args) {
        try{
            MethodTest mt = mock(MethodTest.class);
            when(mt.tripleDot((String[])anyObject())).thenReturn("Hello world!");
            System.out.println(mt.tripleDot(new String[]{"1","2"}));
        }
        catch (Exception e) {
            System.out.println(e.getClass().toString() + ": " + e.getMessage());
        }
    }
}

如果打印语句是:

System.out.println(mt.tripleDot(new String[]{"1"}));

System.out.println(mt.tripleDot("1"));

它将打印“Hello world”。

但是如果打印语句是:

System.out.println(mt.tripleDot(new String[]{"1","2"}));

System.out.println(mt.tripleDot("1","2"));

它将打印“null”。

我也试过在 when 调用中做一些变化,例如 anyObject()anyString() 但无济于事。我不确定 Mockito 是否可以处理关于包含可变数量参数的方法调用的参数匹配器。有可能吗?如果是这样,我应该怎么做才能使这项工作正常进行?

最佳答案

试试 anyVararg()匹配器。这是在 1.8.1 中引入的。

关于java - Mockito 在调用具有可变数量参数的方法时使用参数匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10214311/

相关文章:

java - 我可以使用Cucumber测试使用多种语言的应用程序吗?

java - 从 .txt 文件对整个数据集运行 JUnit (JAVA) 测试

java - 如何在 Java 中解析 JSON 对象的精确值?

java - 如何模拟 CrudRepository 调用?

scala - 模拟 BlazeClientBuilder[IO] 以返回模拟客户端 [IO]

junit - 在 Spring 中模拟 RestTemplate

Java 运行 .bat 文件时出现问题

java - 当 pull 请求 merge 到 bitbucket 时自动更新 npm 版本

java - Mockito 使用参数模拟新实例调用

java - 是否可以在java流中使用when()初始化模拟