测试类中的spock框架覆盖方法

时间:2016-01-18 14:42:50

标签: java unit-testing groovy mocking spock

经过测试的课程:

public class ClassForTest {

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

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

}

Spock课程:

    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()返回"你好ClassForTest"

1 个答案:

答案 0 :(得分:1)

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

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