1

MockForを使用する場合、メソッドが少なくともn 回呼び出されたことを確認するにはどうすればよいですか? 次のように、要求を設定した後、メソッド呼び出しを無視しようとしました。

import groovy.mock.interceptor.MockFor;
import org.junit.Test

class FilterTest {

    interface Filter {
        boolean isEnabled()
    }

    @Test
    public void test() {
        MockFor mockContext = new MockFor(Filter)

        // Expect at least one call
        mockContext.demand.isEnabled {true}
        mockContext.ignore.isEnabled {false}

        // Obtaining a usuable mock instance
        def filter = mockContext.proxyInstance()

        // Fake calling the method
        filter.isEnabled()
        filter.isEnabled()

        // Verify invoked at least once?        
        mockContext.verify(filter)
    }
}

ただし、アサーション エラーが発生します。

junit.framework.AssertionFailedError: verify[0]: expected 1..1 call(s) to 
'isEnabled' but was called 0 time(s).
4

1 に答える 1

2

「無視」ステートメントは「要求」ステートメントをオーバーライドするため、「要求」と「無視」をそのように組み合わせることはできません。

代わりに、次のように有効な範囲を指定できます。

mockContext.demand.isEnabled(1..10) {true}

これは、1 ~ 10 回の呼び出しを受け入れます (ただし、0 回または 11 回以上は受け付けません)。

ただし、「少なくともn回」と言うときに必要であることを意味する範囲の上限を指定する方法は知りません。

ほとんどの実際的な状況では、十分に大きな上限 (100 など) を指定することで問題を解決できると思います。

編集:「ハック」の提案を削除しました(期待どおりに機能しませんでした)

于 2013-02-13T12:37:37.047 に答える