如何使用Spock模拟重载Java方法
我有一个Java类MyClass,它有一个重载的方法进程:如何使用Spock模拟重载Java方法,java,unit-testing,groovy,spock,Java,Unit Testing,Groovy,Spock,我有一个Java类MyClass,它有一个重载的方法进程: class MyClass { private String process(String requestId, String request) { // Initial processing, creates processObject from request // then class actual processing: String temp = process ( proce
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;
}
}
我想使用Spock测试第一个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…)。我已经商量过了,但我想不出来
如何模拟MyClass.process(ProcessClass),以便从中返回假答案并将其传递给其他流程函数?Spock模拟、存根和间谍基于Java或CGLIB动态代理。这些方法依次创建围绕运行时的子类,覆盖所有public方法,并与它们挂钩,以提供模拟测试所需的奇特功能。但是,您使用私有方法,这解释了为什么这不起作用。此外,除非绝对必要,否则测试私人方法和使用间谍是不好的做法。什么使这里有必要使用间谍?为什么不将要测试的东西转移到可测试的方法中?