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有更好的开箱即用。
答案 0 :(得分:3)
refEq
匹配器似乎就是您正在寻找的内容:
verify(listener).tableChanged(refEq(new TableModelEvent(model, 0)));