Не могу создать ложную связь в наследовании с помощью спока

Я новичок в споке. Я создал фиктивный объект в обычном классе, он отлично работает. Но когда у нас есть структура, подобная наследованию, как показано ниже, я не могу правильно смоделировать вещи, это дает ошибку (нулевой указатель). У любого есть идея, как мы можем сделать это в споке.

Class Parent{
    Third getThird(){
        return third;
    }
}

Class Child extend Parent{
    Object method1(){
        String msg=getThird().someMethod(); // need to mock this line
        return object;
    }   
}

given:
    Third third=Mock()
    Child child=new Child()
    child.getThird(false) >> third
    third.someMethod() >>  "xyz"
when :
Object object=child.method1()
then:
//comparing the things

2 ответа

Вы можете смоделировать классы в Spock как любые интерфейсы:

given:
    def thirdMock = Mock(Third) {
      someMethod() >> "xyz"
    }
    def child = Mock(Child) {
      third >> thirdMock
    }
when :
  def object = child.method1()
then:
  //comparing the things

однако, это обычно признак кода, который на самом деле не поддается тестированию. в вашем случае вы, вероятно, должны сделать "третий" инъекционным, а затем ввести имитацию.

Вы можете попробовать это?

given:
    def third = Mock(Third)
    Child.metaClass.getThird = {
        third
    } 
when :
    Object object=child.method1()
then:
    1 * thirdMocked.someMethod() >> "xyz"
and:
    //comparing the things
cleanup:
    Child.metaClass = null
Другие вопросы по тегам