2013-02-12 84 views
1

當使用MockFor時,我如何才能驗證n方法是否被調用至少?我試着忽略設立後需求的方法調用,就像這樣:使用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). 

回答

2

不能合併「需求」和「忽略「以這種方式,因爲」忽略「聲明壓倒了」需求「聲明。

相反,你可以指定的有效範圍是這樣的:

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

將接受1至10號invokations的(但不是零或十或更多)。

我不知道有什麼方法可以在範圍中指定開放式結果的上限,但是,當您說「至少n次」時,暗示您需要這樣做。

在大多數實際情況中,我相信你可以通過指定一個足夠大的上界(比如100)來逃脫。

編輯:刪除了「黑客」的建議(它沒有像我期望的那樣工作)

+0

謝謝,那正是我之後的! – Klarth 2013-02-14 10:58:20

相關問題