0

いくつかの古い単体テストをリファクタリングするときにverify()、メソッドが期待されている回数を確認するための呼び出しを追加しましたが、「期待される」呼び出しが を使用して設定されたものよりも多いことに驚きましたtimes()。何らかの理由で、次の行の期待呼び出しがメソッドに追加されています。

なぜこうなった?

テストクラス

public class SandBoxTest {    
    @Test
    public void shouldGetSand() {
        Sand niceMock = EasyMock.createNiceMock(Sand.class);

        EasyMock.expect(niceMock.sandMethod()).andReturn(1).times(2);
        EasyMock.expect(Box.boxMethod()).andReturn(99).times(11);

        EasyMock.replay(niceMock);

        EasyMock.verify(niceMock);
    }
}

実行時の出力

java.lang.AssertionError: 
  Expectation failure on verify:
    Sand.sandMethod(): expected: 13, actual: 0

期待された出力

java.lang.AssertionError: 
  Expectation failure on verify:
    Sand.sandMethod(): expected: 2, actual: 0

詳細: EasyMock v3.1

フォローアップ: EasyMock で機能リクエストをオープンしました。https://jira.codehaus.org/browse/EASYMOCK-128

4

1 に答える 1

1

では、ここまでです。

expect()状態の javadoc

expect(T value) 現在のスレッドで最後に予想される呼び出しの期待セッターを返します。

これらの呼び出しで

EasyMock.expect(niceMock.sandMethod()).andReturn(1).times(2);
EasyMock.expect(Box.boxMethod()).andReturn(99).times(11);

どちらの場合も、最後に予想される呼び出しは、niceMock.sandMethod()それが唯一の Mock メソッド呼び出しであるため、2+11 = 13.

EasyMock のモック オブジェクトには、呼び出されたものを登録するプロキシ内のカウンターがあります。

Box.boxMethod()単なる静的メソッド呼び出しです。あなたはそれを嘲笑することはできません。または、できるかもしれません。

于 2013-10-03T20:43:49.323 に答える