相关疑难解决方法(0)

在Spock中使用GroovyMock或类似方法模拟静态方法

这里的第一个计时器,如果我错过任何事情,我会道歉.我希望能够使用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)

groovy unit-testing powermock spock powermockito

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

groovy ×1

powermock ×1

powermockito ×1

spock ×1

unit-testing ×1