Здесь новичок, извиняюсь, если я что-то пропустил. Я надеюсь обойти вызов статического метода с помощью Spock. Обратная связь была бы отличной
Я думал, что смогу обойти статический вызов с помощью отличных моков, но не нашел его. Для справки: я нахожусь в процессе модернизации тестов в устаревшей версии java. Рефакторинг запрещен. Я использую spock-0.7 с groovy-1.8.
Вызов статического метода связан с вызовом экземпляра в этой форме:
public class ClassUnderTest{
public void methodUnderTest(Parameter param){
//everything else commented out
Thing someThing = ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(param);
}
}
staticMethod возвращает экземпляр ClassWithStatic instanceMethod возвращает Вещь, необходимую для остальной части метода
Если я напрямую использую глобальный макет, он вернет фиктивный экземпляр в порядке:
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.