This post sugeruje zarówno - że istnieje różnica (patrz komentarz użytkownika SnoopyMe) i że te dwa mogą być używane zamiennie. Dokumentacja EasyMock nie wspomina o żadnej różnicy.Czy jest jakaś różnica między ".i Zwrotem (...). AnyTimes()" i ".andStubReturn (...)" w EasyMock?
Czy istnieje jakaś różnica, zarówno w sensie praktycznym, jak i semantycznym? Jeśli tak, to kiedy lepiej użyć jednego z nich zamiast drugiego?
EDIT:
Poniższe badanie sugeruje, że istnieje różnica, przynajmniej jeśli używane ze ścisłą mock.
@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() nadal weryfikuje zamówienie, który jest egzekwowany przez ścisłą próbę weryfikacji. iStubReturn (...) jednak nie.
Jednak nadal nie jest dla mnie jasne, czy jest to jedyna różnica, czy też różnica semantyczna. Na przykład, czy anyTimes() jest takie samo jak stubReturn() dla zwykłego (nie surowego) mocku?