这篇文章表明两者之间存在差异(参见用户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()相同吗?
就结果而言,差异很小。对于普通的模拟,它是相同的。但是,对于严格的模拟,可以在不考虑顺序的情况下随时调用存根。anyTimes
可以随时调用,但只能按记录的顺序调用。
这种差异是由语义差异引起的。存根是可以在测试过程中随时调用的东西,您实际上并不关心何时和多少次。实际上,大多数模拟方法通常都是存根。
这anyTimes
意味着您确实在乎。但是实际上,我从不使用它。当我进行测试时,我知道会发生什么。我的方法总是存根或期望被称为确切的时间。