使用MockFor,如何验证方法被调用至少n次?

时间:2013-02-12 12:14:28

标签: unit-testing groovy mocking

使用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).

1 个答案:

答案 0 :(得分:2)

您不能以这种方式组合“demand”和“ignore”,因为“ignore”语句会覆盖“demand”语句。

相反,您可以指定有效范围,如下所示:

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

将接受1到10个调用(但不是零或十一个或更多)。

我不知道有任何方法可以在范围中指定开放式上限,但是当你说“至少n次”时,你暗示你需要它。

在大多数实际情况中,我相信你可以通过指定足够大的上限(如100)来逃避。

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

相关问题