Ложный статический метод с GroovyMock или подобным в Spock

Первый таймер, извиняюсь, если ямы что-то пропустили. Я'Я надеюсь обойти вызов статического метода с помощью Спока. Обратная связь была бы отличной

С клёвыми издевательствами я думаля смог бы пройти статический вызов, но не смогЯ нашел это. Для фона ям в процессе дооснащения тестами в устаревшей java. Рефакторинг запрещен. Я'м с помощью спока-0,7 с заводной-1,8.

Вызов статического метода связан с вызовом экземпляра в этой форме:

public class ClassUnderTest{

public void methodUnderTest(Parameter param){
  //everything else commented out
Thing someThing = ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(param);
   }

}

staticMethod возвращает экземпляр ClassWithStatic instanceMethod возвращает Thing, необходимый в остальной части метода

Если я непосредственно использую глобальный макет, он возвращает макетированный экземпляр ok:

def exerciseTheStaticMock(){
    given:
    def globalMock = GroovyMock(ClassWithStatic,global: true)
    def instanceMock = Mock(ClassWithStatic)

    when:
    println(ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(testParam))

    then:
    interaction{
        1 * ClassWithStatic.staticMethodThatReturnsAnInstance() >> instanceMock
        1 * instanceMock.instanceMethod(_) >> returnThing
    }
}

Но если я запускаю methodUnderTest из ClassUnderTest:

def failingAttemptToGetPastStatic(){
    given:
    def globalMock = GroovyMock(ClassWithStatic,global: true)
    def instanceMock = Mock(ClassWithStatic)
    ClassUnderTest myClassUnderTest = new ClassUnderTest()

    when:
    myClassUnderTest.methodUnderTest(testParam)

    then:
    interaction{
        1 * ClassWithStatic.staticMethodThatReturnsAnInstance() >> instanceMock
        1 * instanceMock.instanceMethod(_) >> returnThing
    }
}

Он сбрасывает реальный экземпляр ClassWithStatic, который перестает работать в своем instanceMethod.

Ответы на вопрос(3)

Ваш ответ на вопрос