Mockito等同于这个Hamcrest“samePropertyValuesAs”/ jMock“with”成语?

时间:2016-10-08 09:33:11

标签: java properties mockito hamcrest jmock

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有更好的开箱即用。

1 个答案:

答案 0 :(得分:3)

refEq匹配器似乎就是您正在寻找的内容:

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