使用 ArgumentMatcher 验证参数

Mockito 提供了一个 Matcher<T> 接口以及一个抽象的 ArgumentMatcher<T> 类来验证参数。它使用与 ArgumentCaptor 相同的用例的不同方法。此外,ArgumentMatcher 也可用于模拟。这两个用例都使用 Mockito.argThat() 方法,该方法提供了一个合理可读的测试代码。

verify(someMock).someMethod(Mockito.argThat(new ArgumentMatcher<String>() {
       
    @Override
    public boolean matches(Object o) {
        return o instanceof String && !((String)o).isEmpty();
    }

});        

从 ArgumentMatcher 的 JavaDocs:

警告: 使用复杂的参数匹配是合理的,尤其是自定义参数匹配器,因为它可以使测试的可读性降低。有时最好为传递给模拟的参数实现 equals()(Mockito 自然地使用 equals() 进行参数匹配)。这可以使测试更清洁。