小编bei*_*jxu的帖子

Java单元测试模拟一个以谓词作为参数的方法

我有两节课:

ClassA {
   public String methodA(String accountId, Predicate<User> predicate) {
      // more code
   }; 
}

ClassB {
  methodB(){
    ClassA objectA = new ClassA();
    objectA.methodA("some id", PredicatesProvider.isUserValid());
    // more code ...
  }
}

class PredicatesProvider {
   static Predicate<User> isUserValid(){
   return (user) -> {
      return  user.isValid();
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我需要模拟ClassA,所以我使用Mockito的模拟方法,如下所示:

ClassA mockObjectA = Mockito.mock(ClassA.class);
Mockito.when(mockObjectA).methodA("some id", PredicatesProvider.isUserValid()).thenReturn("something");
Run Code Online (Sandbox Code Playgroud)

Mockito无法找到签名匹配.

The java.lang.AssertionError: expected:<PredicatesProvider$$Lambda$5/18242360@815b41f> but was:<PredicatesProvider$$Lambda$5/18242360@5542c4ed>
Run Code Online (Sandbox Code Playgroud)

这是我想要实现的简化版本.我猜这是谓词的equals()函数的问题.知道如何模拟具有谓词参数的方法吗?

谢谢

predicate mockito java-8

4
推荐指数
1
解决办法
7241
查看次数

标签 统计

java-8 ×1

mockito ×1

predicate ×1