Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Java 测试类中的spock框架重写方法_Java_Unit Testing_Groovy_Mocking_Spock - Fatal编程技术网

Java 测试类中的spock框架重写方法

Java 测试类中的spock框架重写方法,java,unit-testing,groovy,mocking,spock,Java,Unit Testing,Groovy,Mocking,Spock,测试等级: public class ClassForTest { public String hello(){ return "hello " + getClassName(); } public String getClassName(){ return ClassForTest.class.getName(); } } 斯波克等级: class ClassForSpockTest extends Spe

测试等级:

public class ClassForTest {

    public String hello(){
        return "hello " + getClassName();
    }

    public String getClassName(){
        return ClassForTest.class.getName();
    }    

}
斯波克等级:

    class ClassForSpockTest extends Specification{
    def setupSpec(){ 
       ClassForTest.metaClass.getClassName={"ClassForSpockTest"} 

    }

    def "override test"(){
        setup:
        ClassForTest cft = new ClassForTest()   

        expect:
        cft.getClassName()  == "ClassForSpockTest"
    }

    def "mock test"(){
        setup:
        ClassForTest cft = new ClassForTest()   

        expect:
        cft.hello() == "hello ClassForSpockTest"
    }


}
覆盖测试通过!
模拟测试正在崩溃,cft.hello()返回“hello ClassForTest”

您不能使用元类从Java类中的另一个方法重写该类中的方法调用。这是spock、Java和groovy的一个限制。在这种情况下,您必须使用其他模拟技术。例如,您可以使用子类化:

 setup:
 ClassForTest cft = new ClassForTest() {
     String getClassName() {"ClassForSpockTest"} 
 }

这段代码的工作方式与我使用Groovy 2.4.15时的工作方式相同。