gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:28:36 71 4
gpt4 key购买 nike

第一次来这里,如果我错过任何事情,我深表歉意。
我希望能解决使用Spock调用静态方法的问题。反馈会很棒

使用普通的模拟,我以为我可以通过静态调用,但没有找到它。
对于背景,我正在对旧版Java中的测试进行改造。禁止重构。我正在使用groovy-1.8的spock-0.7。

静态方法的调用与以下形式的实例调用链接在一起:

public class ClassUnderTest{

public void methodUnderTest(Parameter param){
//everything else commented out
Thing someThing = ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(param);
}

}


staticMethod返回ClassWithStatic的实例
instanceMethod返回方法其余部分所需的Thing

如果我直接执行全局模拟,它将返回模拟的实例确定:

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
}
}


但是,如果我从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(_) >> returnThing
}
}


它抛出了ClassWithStatic的真实实例,该实例在instanceMethod中继续失败。

最佳答案

Spock只能模拟Groovy中实现的静态方法。为了模拟用Java实现的静态方法,您需要使用GroovyMockPowerMockJMockit之类的工具。

PS:鉴于这些工具运用了一些深奥的技巧来实现其目标,我很想知道它们是否以及如何与Groovy / Spock(而不是Java / JUnit)中实现的测试一起工作。

关于unit-testing - 在Spock中使用GroovyMock或类似方法模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15824315/

71 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com