我试图计算调用静态方法的次数。
我想验证基本和内部方法调用的计数。
下面显示的是一个非常简化的代码。我尝试了一些变化,但无法运行而没有错误。
我正在尝试验证计数:
ClassX.CallsClassY()
ClassY.DoSomething()
请帮忙。
错误讯息:
Too few invocations for:
interactions * globalMock.DoSomething() // Does not work (0 invocations)
Unmatched invocations (ordered by similarity):
2 * globalMock.DoSomething()
2 * globalMock.println('Hello Spock')
at org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:78)
at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:76)
at SpockSpec.Count how many times ClassY is called(SpockSpec.groovy:10)
代码:
import spock.lang.Specification
class SpockSpec extends Specification {
def "Count how many times ClassY is called"(){
def count = 5
def interactions = count + 1
def globalMock = GroovySpy(ClassY, global: true)
when:
ClassX.CallClassY(count)
then:
count == 5
// TODO: Count how many times ClassY.DoSomething() and ClassX.CallClassY() is called
interactions * globalMock.DoSomething() // Does not work
}
class ClassX {
public static void CallClassY(int count)
{
count.times {
ClassY.DoSomething()
}
ClassY.DoSomething()
}
}
class ClassY {
static void DoSomething() {
println "Hello Spock"
}
}
}
答案 0 :(得分:2)
您可以执行类似
的操作def "Count how many times ClassB is called"(){
given:
def calls = 0
and:
ClassY.metaClass.'static'.DoSomething = {
calls++
}
and:
def count = 5
when:
ClassX.CallClassY(count)
then:
count == calls + 1
}