2015-08-05 5 views
0

У меня есть следующий класс, который я пытаюсь издеваться, используя Spock:Mock метод на фиктивный объект в Спока

final class A{ 
    private B b 
    public getB(){ 
     return b 
    } 
    public A(B b){ 
     this.b = b 
    } 
} 

, и я попытался дразнить этот класс, используя следующий код и он работает.

def "test"(){ 
    def mockA = GroovyMock(A) 
    when: 
    service.x() 
    then: 
    1 * new A(*_) >> {mockA} 
} 

Ниже мой х() метод:

x(){ 
A a = new A(b) 
B b = a.getB() 
} 

Теперь я хочу, чтобы дразнить a.getB(), чтобы получить фиктивный объект для Б. Я пытался создать макет для B, но я я получаю null на a.getB(). Можно ли издеваться над методом getB(), чтобы получить макет Object for B?

Так что я хочу сделать некоторые вещи, как

1 * a.getB() >> {mockB} 

, но я получаю исключение нулевого

+0

http://stackoverflow.com/questions/21194523/can-spock-mock-a-java-constructor –

ответ

0

сделать

def mockA = GroovyMock(A) >> { getB() >> GroovyMock(B) }.

P.S. Я удивлен, насмехаясь над конструктором работ A, не указав global: true

+0

Да, шпион определенно необходим с глобальным значением true , Но я все еще получал ошибку с кодом выше. Наконец, я изменил свой оригинальный код, чтобы поддержать модульные тесты. – vkate

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