Ложный статический метод с 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.