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