Mockito:如何模拟具有特定 属性 值的对象

Mockito: how to mock an object that has certain property value

假设我们有以下 class:

class Person { 

private int age;
private String name;

public Person(int age, String name){
   this.age = age;
   this.name = name;
}

// getters and setters
}

我们也有一些 class:

class SpecialClass {

   public int giveNumber(Person p) { 
   ...
   return (int)(...)
   }
}

假设我想模拟一个 SpecialClass 的对象,如果 'giveNumber' 是用名称 属性 等于 'John' 的 Person 对象调用的,那么 'giveNumber' 将检索 500.

例如,

SpecialClass sc = mock(SpecialClass.class);
when(sc.giveNumber(p with name = "John").thenReturn(500);

有什么方法可以用 Mockito 做到吗?

您可以使用 org.mockito.ArgumentMatchers.argThat(...) 传递一个与所需实例匹配的 lambda。在这种情况下,lamdba 类似于

(person) -> "John".equals(person.getName())

放在一起:

SpecialClass sc = mock(SpecialClass.class);
when(sc.giveNumber(argThat((person) -> "John".equals(person.getName())))).thenReturn(500);