如何在 mockito 2 中匹配可变参数?

ens*_*ius 3 mockito

更新到 2.3 后,来自mockito 1 的方法不起作用。

private class ArgumentsMatcher implements ArgumentMatcher<Object[]> {
    private final Object[] expected;

    private ArgumentsMatcher(Object[] expected) {
        this.expected = expected;
    }

    @Override
    public boolean matches(Object[] argument) {
        return Arrays.equals(expected, argument);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用这样的捕获器匹配它:

// Use an argument captor of whatever type the varargs method is
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
// Verify on the method using the captor
verify(fooClass).fooMethod(captor.capture());
// Assert on the expected values
assertEquals(captor.getAllValues(), Arrays.asList("vararg1", "vararg2"));
Run Code Online (Sandbox Code Playgroud)

这样做的好处是你可以匹配数组(如果你在数组和可变参数可以混合的情况下)也可以使用你想要的任何 hamcrest 匹配器,这样你就可以做一些事情,比如验证单个元素是否存在,忽略顺序,忽略重复项,或任何您需要做的事情。