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)。

编辑:删除了“hack”建议(它没有像我预期的那样工作)

于 2013-02-13T12:37:37.047 回答