Java 具有参数不识别方法的Mockito ArgumentMatcher lambda函数

Java 具有参数不识别方法的Mockito ArgumentMatcher lambda函数,java,lambda,mockito,Java,Lambda,Mockito,我正在尝试学习Mockito框架并实现一些mock。目前,我想使用ArgumentMatcher检查传递的对象是否匹配。我发现在过去,通过创建一个扩展ArgumentMatcher的新类,这是可能的。但是,现在可以使用Java8lambda函数了。这就是我试图实现它的方式: private ArgumentMatcher<User> matchUser(User user) { return u -> u != null && user.getId()

我正在尝试学习Mockito框架并实现一些mock。目前,我想使用
ArgumentMatcher
检查传递的对象是否匹配。我发现在过去,通过创建一个扩展
ArgumentMatcher
的新类,这是可能的。但是,现在可以使用Java8lambda函数了。这就是我试图实现它的方式:

private ArgumentMatcher<User> matchUser(User user) {
    return u -> u != null && user.getId() == u.getId();
}
private ArgumentMatcher matchUser(用户用户){
返回u->u!=null&&user.getId()==u.getId();
}
IntelliJ给了我一个错误,因为它告诉我
u
没有
getId
方法。
是否应该将
u
类型推断为
User

您有Mockito 1.x版,其中
ArgumentMatcher
是一个抽象类。从mockito2.x开始,他们将其更改为
接口
,允许使用lambdas

ArgumentMatcher的源代码显示:


如果您将依赖项修复到Mockito的最新版本,它就会工作。

我认为您的代码没有问题。有时IDE很难推断类型;也许您可以(暂时)通过使参数类型显式来帮助编译器,即
返回(用户u)->…
。这是一个方法声明,表示它返回
参数匹配器,但您有一个返回布尔值的主体。也许您需要类似于
matchUser=(u)->u!=null&&user.getId()==u.getId()
。你完全正确。我使用的是Spring Boot 1.5.9,它有Mockito 1.10.19。谢谢你指出这一点。