2014-12-29 97 views
1

我正在模擬spock中的類,只是想檢查被測試的方法內部的方法是否被調用,我不想讓內部方法運行。模擬類函數被調用,而不是被嘲笑

class CalculationManager{ 
     void processRequest(){ 
     System.out.print("In process Request method")  } 
    } 
class CodeProcessor{ 
      void processMessage(Request request){ 
      CalculationManager calculationManager = new CalculationManager(request) 
      calculationManager.processRequest(request) 
    } 
} 

class Request{ 
int id 
} 

def "process code test"(){ 
     given: 
      CodeProcessor codeProcessor = new CodeProcessor() 
      Request request = new Request() 
      request.setId(10) 
      CalculationManager calculationManager = Mock(CalculationManager) 
     when: 
      codeProcessor.processMessage(request) 
     then: 
      1 * calculationManager.processRequest() 
    } 

在上面的例子中,我只需要檢查encodeMessage是否被調用。但是當我運行上面的代碼時,它將在encodeMessage()中運行代碼。預計這種行爲不可行。任何人都可以指出我要去的地方錯在這裏

+0

請點擊這裏並沒有雙後http://forum.spockframework.org。 –

回答

0

下面的代碼工作完全正常,它失敗:

JUnit 4 Runner, Tests: 1, Failures: 1, Time: 86 
Test Failure: process code test(Test) 
Too few invocations for: 

1 * codeProcessor.encodeMessage(request) (0 invocations) 

Unmatched invocations (ordered by similarity): 

1 * codeProcessor.processMessage([email protected]) 

代碼:

@Grab('org.spockframework:spock-core:0.7-groovy-2.0') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class Test extends Specification { 
    def "process code test"(){ 
     given: 
      CodeProcessor codeProcessor = Mock(CodeProcessor) 
      Request request = new Request() 
      request.setId(10) 
     when: 
      codeProcessor.processMessage(request) 
     then: 
      1 * codeProcessor.encodeMessage(request) 
    } 
} 

class CodeProcessor { 
    void processMessage(Request request) { 
     encodeMessage(request) 
    } 
    void encodeMessage(Request request){} 
} 

class Request { 
    int id 
} 
+0

嗨歐泊,我需要找出爲什麼它爲我跑。因爲我沒有複製粘貼代碼。將看看並重新發布。同時,我以上情況調用次數太少: 1 * codeProcessor.encodeMessage(request)(0 invocations)從processMessage函數內部調用1次。但是,爲什麼當這個函數應該被完全調用時,它的調用仍然太少了 –

+0

好的,將嘗試幫助轉貼的問題。只要讓我知道,如果沒關係。或者提供重現問題的SSCCE,並且可以像我提供的示例那樣運行。 – Opal

+0

請參考以上評論關於我的懷疑與上述代碼的結果 –