等效的Mockito这Hamcrest“samePropertyValuesAs” / JMock的

2019-09-30 11:09发布

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));
}

NB这是从“通过测试的指导下成长的面向对象的软件”(第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更好的东西开箱。

Answer 1:

refEq匹配好像是你在找什么:

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


文章来源: Mockito equivalent to this Hamcrest “samePropertyValuesAs”/jMock “with” idiom?