2016-01-18 6 views
3

Испытано класс:Спока метод рамки коррекции в тестовом классе

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" 
    } 


} 

переопределение пройдена! Mock test crashing, cft.hello() return "hello ClassForTest"

ответ

1

Вы не можете использовать метакласс для переопределения вызова метода в классе Java из другого метода в этом классе. Это ограничение spock, Java и groovy. В этом случае вы должны использовать другие методы издевательства. Например, вы можете использовать подклассы:

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

благодарит за ответ –

Смежные вопросы