Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 计算在Spock中调用静态方法的次数_Unit Testing_Groovy_Spock - Fatal编程技术网

Unit testing 计算在Spock中调用静态方法的次数

Unit testing 计算在Spock中调用静态方法的次数,unit-testing,groovy,spock,Unit Testing,Groovy,Spock,我试图计算静态方法被调用的次数 我想验证基本方法调用和内部方法调用的计数 下面显示的是一个非常简化的代码。我尝试了一些变化,但不能运行没有错误 我正在尝试验证以下各项的计数: ClassX.CallsClassY() ClassY.DoSomething() 请帮忙 错误消息: 对以下对象的调用太少: 交互作用*globalMock.DoSomething()//不起作用(0次调用) 不匹配的调用(按相似性排序): 2*globalMock.DoSomething() 2*globalMoc

我试图计算静态方法被调用的次数

我想验证基本方法调用和内部方法调用的计数

下面显示的是一个非常简化的代码。我尝试了一些变化,但不能运行没有错误

我正在尝试验证以下各项的计数:

  • ClassX.CallsClassY()
  • ClassY.DoSomething()
请帮忙

错误消息:

对以下对象的调用太少:
交互作用*globalMock.DoSomething()//不起作用(0次调用)
不匹配的调用(按相似性排序):
2*globalMock.DoSomething()
2*globalMock.println('Hello Spock')
位于org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:78)
位于org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:76)
在SpockSpec.Count调用ClassY的次数(SpockSpec.groovy:10)
代码:

导入spock.lang.Specification
类SpockSpec扩展了规范{
def“计算调用ClassY的次数”(){
def计数=5
def交互=计数+1
def globalMock=GroovySpy(经典,全局:true)
什么时候:
ClassX.CallClassY(计数)
然后:
计数==5
//TODO:计算ClassY.DoSomething()和ClassX.CallClassY()被调用的次数
交互作用*globalMock.DoSomething()//不起作用
}
类别X{
公共静态无效CallClassY(整数计数)
{
数到{
经典的
}
经典的
}
}
一流的{
静态空隙剂量测定法(){
打印“你好,斯波克”
}
}
}

您可以执行以下操作

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
    }

只有全局模拟才能模拟静态方法。有关详细信息,请参阅参考文档()。@PeterNiederwieser感谢您的建议。我更新了代码并尝试使用“”部分中定义的GroovySpy,但仍然出现错误。我做错了什么?有一件事是错误的,mock方法没有参数,但是
表示“任何单个参数”。@PeterNiederwieser我也没有参数尝试过,但得到了类似的错误。但是我会更新代码和错误消息。模拟静态方法的正确语法是
interactions*ClassY.DoSomething()