2017-02-10 106 views
-1

我有一个Java类MyClass的有重载方法的过程嘲笑一个重载的Java方法:如何使用斯波克

class MyClass { 
    private String process(String requestId, String request) { 
     // Initial processing, creates processObject from request 
     // then class actual processing: 
     String temp = process (processObject); 
     // do stuff I want to test, generate response 
     return response; 
    }; 
    private String process(ProcessClass processObject) { 
     String result; 
     // do actual processing of processObject 
     return result; 
    } 
} 

我想测试使用斯波克第一process()方法。我试图用间谍模拟重载的进程(ProcessClass)。这里的testProcess.groovy至今:

class TestProcessUsingString extends Specification { 
    given: 
     def testInput = "TestInput" 
     def myObject = Spy(MyClass) { 
     process(_ as ProcessClass) >> "My result string" 
     } 
    when: 
     def response = myObject.process("TestInput") 
     // Check response 

此方法不起作用嘲笑的方法处理(ProcessClass ...),因为我本来期望。我咨询了http://spockframework.org/spock/docs/1.0/interaction_based_testing.html,但我无法弄清楚。

我该如何嘲笑MyClass.process(ProcessClass),以便我可以从它返回一个假的答案并将其传递给其他进程函数?

+0

为什么不把你想测试的东西移动到可测试的方法? –

回答

0

Spock嘲笑,存根和间谍是基于Java或CGLIB动态代理。这些反过来又创建了运行时的子类,覆盖了所有的方法,并将它们挂钩,以提供模拟测试所需的特性。然而,你使用私有方法,这解释了为什么这不起作用。此外,除非绝对必要,否则测试私人方法和使用间谍是不好的做法。是什么使这里需要间谍?