Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Spock模拟重载Java方法_Java_Unit Testing_Groovy_Spock - Fatal编程技术网

如何使用Spock模拟重载Java方法

如何使用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

我有一个Java类MyClass,它有一个重载的方法进程:

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方法,并与它们挂钩,以提供模拟测试所需的奇特功能。但是,您使用私有方法,这解释了为什么这不起作用。此外,除非绝对必要,否则测试私人方法和使用间谍是不好的做法。什么使这里有必要使用间谍?

为什么不将要测试的东西转移到可测试的方法中?