Первый таймер здесь, извинения, если я что-то пропустил. Я надеюсь получить вызов статического метода, используя Spock. Обратная связь будет отличной
С groovy mocks я думал, что смогу пройти статический звонок, но не нашел его. Для фона, я в процессе дооснащения тестов в старой 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 возвращает Вещь, необходимую в остальной части метода
Если я непосредственно выполняю глобальный макет, он возвращает посмеянный экземпляр 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
}
}
Но если я запустил методUnderTest из 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, который продолжает терпеть неудачу в своем методе экземпляра.