2015-12-11 5 views
6

This postは、違いがあること(ユーザーSnoopyMeのコメントを参照)と、その2つを同じ意味で使用できることを示唆しています。 EasyMockのマニュアルでは、何の違いについても言及していません。EasyMockの ".andReturn(...)。anyTimes()"と ".andStubReturn(...)"に違いはありますか?

実質的にも意味的にも違いはありますか?そうであれば、いつ他のものを使用するのがより適切ですか?

EDIT:

以下の試験は、厳密モックで使用される少なくともとき、差があることを示唆している:。

@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は、あなたが気にかけていることを意味します。しかし、実際には私はそれを使用しません。私がテストをするとき、私は何が起こるのか知っています。私の方法は常にスタブされているか、正確な時間と呼ばれることが期待されます。

関連する問題