假设我们有以下类:
class Person {
private int age;
private String name;
public Person(int age, String name){
this.age = age;
this.name = name;
}
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我们还有一些课程:
class SpecialClass {
public int giveNumber(Person p) {
...
return (int)(...)
}
}
Run Code Online (Sandbox Code Playgroud)
假设我想模拟一个 SpecialClass 的对象,如果使用 name 属性等于 'John' 的 Person 对象调用 'giveNumber',那么 'giveNumber' 将检索 500。
例如,
SpecialClass sc = mock(SpecialClass.class);
when(sc.giveNumber(p with name = "John").thenReturn(500);
Run Code Online (Sandbox Code Playgroud)
有没有办法用 Mockito 做到这一点?
您可以使用org.mockito.ArgumentMatchers.argThat(...)向它传递一个与所需实例匹配的 lambda。在这种情况下,lamdba 将类似于
(person) -> "John".equals(person.getName())
Run Code Online (Sandbox Code Playgroud)
把它放在一起:
SpecialClass sc = mock(SpecialClass.class);
when(sc.giveNumber(argThat((person) -> "John".equals(person.getName())))).thenReturn(500);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |