2014-03-27 134 views
3

在我們的Spock測試中,我們要檢查軟件中是否選擇了正確的路徑。但我們並不想測試被調用的方法的功能(這是在單獨的測試完成)Spock測試,只檢查方法是否被調用,不執行

def "Test"() { 
    setup: 
    service.metaClass.innerMethod = { -> return null } 

    when: 
    service.doSomething("[email protected]") 

    then: 
    1 * service.innerMethod(*_) 
} 

此測試總是失敗,因爲在innerMethod代碼調用,方法調用的調用在innerMethod計數,而不是方法innerMethod

| Too few invocations for: 
    1 * service.innerMethod(*_) (0 invocations) 

Unmatched invocations (ordered by similarity): 

    1 * secondService.doSomething() 

的調用如何我剛剛得到innerMethod的調用和模擬功能齊全了嗎?

回答

10

如果沒有嘲諷服務本身,你需要做這樣的事情(使用的metaClass時要注意通過適當的參數:

def "Test"() { 
    setup: 
     def calls = 0 
     service.metaClass.innerMethod = { p1 -> calls++ } 
    when: 
     service.doSomething("[email protected]") 
    then: 
     calls==1 
} 

,如果你是嘲諷的服務,

def "Test"() { 
    when: 
     service.doSomething("[email protected]") 
    then: 
     1 * service.innerMethod(_) 
} 
+0

感謝您的提示,我們將使用第一種方法,因爲服務電話在相同的服務範圍內,因此不會被嘲弄 –

+1

聽起來不錯! –

+0

絕佳的答案! –

相關問題