这里的第一个计时器,如果我错过任何事情,我会道歉.我希望能够使用Spock来调用静态方法.反馈会很棒
随着groovy嘲笑,我以为我能够通过静态调用,但没有找到它.作为背景,我正在改进遗留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);
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我从ClassUnderTest运行methodUnderTest:
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(_) …Run Code Online (Sandbox Code Playgroud)