This post表明两者之间存在差异(请参阅用户SnoopyMe的评论)并且两者可以互换使用。 EasyMock文档没有提到任何差异。
实际上或语义上有什么区别吗?如果是这样,何时使用一个而不是另一个更合适?
编辑:
以下测试表明存在差异,至少在与严格模拟一起使用时:
@Test
public void testTestMe() {
Bar bar = createStrictMock(Bar.class);
expect(bar.doBar()).andReturn(1).anyTimes();
expect(bar.doOtherBar()).andReturn(2).once();
replay(bar);
Foo foo = new Foo(bar);
foo.testMe();
verify(bar);
}
@Test
public void testTestMeAgain() {
Bar bar = createStrictMock(Bar.class);
expect(bar.doBar()).andStubReturn(1);
expect(bar.doOtherBar()).andReturn(2).once();
replay(bar);
Foo foo = new Foo(bar);
foo.testMe();
verify(bar);
}
public class Foo {
private final Bar _bar;
public Foo(Bar bar) {
_bar = bar;
}
public void testMe() {
_bar.doBar();
_bar.doOtherBar();
_bar.doBar();
}
}
andReturn(...)。anyTimes()仍然验证顺序,这是由严格模拟验证强制执行的。然而,andStubReturn(...)没有。
但是,如果这是唯一的区别,或者语义差异是什么,我仍然不清楚。例如,anyTimes()与常规(非严格)模拟的stubReturn()相同吗?
答案 0 :(得分:5)
结果差异很小。对于普通的模拟,它是相同的。但是,对于严格的模拟,可以随时调用存根而不考虑排序。 anyTimes
可以随时调用,但只能按记录顺序调用。
这种差异是由语义差异引起的。存根是可以在测试期间随时调用的东西,你并不关心何时和多少次。实际上,大多数模拟方法都是存根。
然后anyTimes
意味着你关心。但实际上,我从不使用它。当我做测试时,我知道会发生什么。我的方法总是存在或预期被称为确切的时间。