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);
假设我们有以下 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);