Mockito 相当于这个 Hamcrest "samePropertyValuesAs"/jMock "with" 成语?

Mockito equivalent to this Hamcrest "samePropertyValuesAs"/jMock "with" idiom?

Hamcrest/jMock 代码如下所示:

@Test
public void setsSniperValuesInColumns() {
    context.checking(new Expectations() {{
        one(listener).tableChanged(with(aRowChangedEvent())); 
    }});
    model.sniperStatusChanged(new SniperState("item id", 555, 666), MainWindow.STATUS_BIDDING);
    ...
}

private Matcher<TableModelEvent> aRowChangedEvent() {
    return samePropertyValuesAs(new TableModelEvent(model, 0));
}

注意这是取自 "Growing Object-Oriented Software Guided by Tests"(第 157 页)。本书作者使用 Hamcrest 和 jMock。我认为 AssertJ 和 Mockito 可能更好。当然,可以在同一个项目中同时使用这两个测试框架,但它会变得非常混乱并且看起来并不理想。

samePropertyValuesAs 来自 import static org.hamcrest.beans.SamePropertyValuesAs.samePropertyValuesAs;
with 似乎来自 jMock

所以我试图找到一种方法,我可以在他们使用 Expectations 的地方使用 Mockito 的 verify 方法。但是我有什么办法可以做到这一点:

verify( listener ).tableChanged( samePropertyValues( new TableModelEvent( model, 0 )));

...当然可以想象一种解决方法,您可以逐一设置所有属性...但我认为 Mockito 有更好的开箱即用功能。

refEq 匹配器似乎就是您要找的:

verify(listener).tableChanged(refEq(new TableModelEvent(model, 0)));