2015-12-11 7 views
6

This post предлагает и то, и другое, что есть разница (см. Комментарий пользователя SnoopyMe), и что эти два варианта можно использовать взаимозаменяемо. В документации EasyMock не упоминается никаких различий.Есть ли разница между «.andReturn (...). AnyTimes()» и «.andStubReturn (...)» в 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() по-прежнему проверяет порядок, который соблюдается строгой манерой проверки. иStubReturn (...), однако, нет.

Однако мне все еще не ясно, если это единственное различие или какая разница в семантике. Например, anyTimes() совпадает с stubReturn() для регулярного (не строгого) макета?

ответ

4

Разница крошечная с точки зрения результатов. Для нормального макета, это то же самое. Тем не менее, за строгий макет, заглушку можно вызвать в любое время без какого-либо уважения к заказу. anyTimes можно вызывать в любое время, но только в записанном порядке.

Эта разница обусловлена ​​смысловой разницей. Заглушка - это то, что можно вызвать в любой момент во время теста, и вам все равно, когда и сколько раз. На самом деле, большинство издевающихся методов - это заглушки в целом.

Тогда anyTimes означает, что вам все равно. Но на самом деле я никогда не использую его. Когда я делаю тест, я знаю, что произойдет. Мои методы всегда затушевываются или, как ожидается, будут называться точным количеством времени.