Java 这两者之间有什么区别吗;。andReturn(…)。anyTimes();及";。andStubReturn(…)”;在EasyMock?

Java 这两者之间有什么区别吗;。andReturn(…)。anyTimes();及";。andStubReturn(…)”;在EasyMock?,java,unit-testing,easymock,Java,Unit Testing,Easymock,建议两者都使用——两者有区别(参见用户SnoopyMe的评论),并且两者可以互换使用。EasyMock文档没有提到任何区别 在实际或语义上有什么区别吗?如果是的话,什么时候使用一个比另一个更合适 编辑: 以下测试表明存在差异,至少在与严格模拟一起使用时是如此: @Test public void testTestMe() { Bar bar = createStrictMock(Bar.class); expect(bar.doBar()).andReturn(1).anyTim

建议两者都使用——两者有区别(参见用户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
可以在任何时候调用,但只能按记录的顺序调用

这种差异是由语义差异造成的。存根是可以在测试过程中随时调用的东西,您并不真正关心何时调用以及调用多少次。事实上,大多数模拟方法通常都是存根

然后
任何时候
都意味着你在乎。但事实上,我从来没用过。当我做测试时,我知道会发生什么。我的方法总是被截短,或者被精确地调用