使用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).
答案 0 :(得分:2)
您不能以这种方式组合“demand”和“ignore”,因为“ignore”语句会覆盖“demand”语句。
相反,您可以指定有效范围,如下所示:
mockContext.demand.isEnabled(1..10) {true}
将接受1到10个调用(但不是零或十一个或更多)。
我不知道有任何方法可以在范围中指定开放式上限,但是当你说“至少n次”时,你暗示你需要它。
在大多数实际情况中,我相信你可以通过指定足够大的上限(如100)来逃避。
编辑:删除了“黑客”建议(它没有像我预期的那样工作)