说我在 mock 这个类Foo
class Foo {
public void doThing(Bar bar) {
// ...
}
}
这是条形码
class Bar {
private int i;
public int getI() { return i; }
public void setI(int i) { this.i = i; }
}
我知道我可以使用 Mockito 的验证功能来查看是否使用 Bar
或任何 的特定实例在模拟上调用了
与 Foo#doThing(Bar)
BarMockito.any(Bar.class)
, 但是有什么方法可以确保它被任何 Bar
调用但具有特定值对于 i
或 Bar#getI()
?
我知道的都是可能的:
Foo mockedFoo = mock(Foo.class);
Bar someBar = mock(Bar.class);
...
verify(mockedFoo).doThing(someBar);
verify(mockedFoo).doThing(any(Bar.class);
我想知道的是,是否有一种方法可以验证具有特定真实情况的 Bar
是否作为参数传递。
最佳答案
在 Mockito 2.1.0 及更高版本的 Java 8 中,您可以将 lambda 传递给 argThat 开箱即用,这样就不需要自定义参数匹配器。对于 OP 中的示例将是:
verify(mockedFoo).doThing(argThat((Bar aBar) -> aBar.getI() == 5));
这是因为从 Mockito 2.1.0 开始,ArgumentMatcher
是一个函数式接口(interface)。
关于java - Mockito 可以验证参数是否具有某些属性/字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31993439/