2015-12-11 19 views
6

This post suggerisce sia che ci sia una differenza (vedi commento dell'utente SnoopyMe) e che i due possono essere usati in modo intercambiabile. La documentazione di EasyMock non fa alcuna menzione di alcuna differenza.C'è qualche differenza tra ".eReturn (...). AnyTimes()" e ".andStubReturn (...)" in EasyMock?

C'è qualche differenza, praticamente o semanticamente? In tal caso, quando è più appropriato utilizzare l'uno sull'altro?

EDIT:

Il seguente test suggerisce che v'è una differenza, almeno quando utilizzato con un rigoroso finto.

@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() verifica ancora ordine, che viene applicato dal rigoroso simulato sulla verifica. andStubReturn (...), tuttavia, non lo fa.

Tuttavia, non è ancora chiaro per me se questa è l'unica differenza, o quale sia la differenza semantica. Ad esempio, anyTimes() è lo stesso di stubReturn() per un mock regolare (non rigoroso)?

risposta

4

La differenza è minima in termini di risultati. Per un normale finto, è lo stesso. Tuttavia, per una simulazione rigorosa, lo stub può essere chiamato in qualsiasi momento senza alcun rispetto per l'ordine. anyTimes può essere chiamato tutte le volte ma solo nell'ordine registrato.

Questa differenza è causata dalla differenza semantica. Un mozzicone è qualcosa che può essere chiamato in qualsiasi momento durante il test e non ti interessa davvero quando e quante volte. In realtà, la maggior parte dei metodi di derisione sono in genere matrici.

Quindi anyTimes significa che ci si cura. Ma in realtà, non lo uso mai. Quando faccio un test, so cosa succederà. I miei metodi sono sempre soppressi o dovrebbero essere chiamati una quantità esatta di tempo.

Problemi correlati