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));
}
注:这摘自"由测试引导的面向对象软件的成长"(第157页)。本书的作者使用Hamcrest和jMock。我认为AssertJ和Mockito可能更好。当然,在同一个项目中使用这两种测试框架是可能的,但这会变得相当混乱,看起来不太理想。
samePropertyValuesAs
来源于import static org.hamcrest.beans.SamePropertyValuesAs.samePropertyValuesAs;
with
似乎来自jMock
所以我想找到的是一种方法,我可以使用Mockito的verify
方法,他们使用Expectations
。但是有什么办法可以做到这一点吗?
verify( listener ).tableChanged( samePropertyValues( new TableModelEvent( model, 0 )));
…当然,你可以想象一种变通方法,你可以一个接一个地设置所有的属性。但我认为Mockito有更好的东西。
refEq
匹配器似乎是你正在寻找的:
verify(listener).tableChanged(refEq(new TableModelEvent(model, 0)));