2014-12-29 60 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

请参考以上评论关于我的怀疑与上述代码的结果 –