当前位置: 首页 > 知识库问答 >
问题:

Spock spy注册的Groovy方法调用太少(没有)

林祯
2023-03-14

我编写了一个Groovy扩展库,它为List类添加了额外的方法。我试图用Spock编写测试,但我无法让我的一些测试工作。

代码

public static def tailIfAny(List list) {

    println "tailIfAny() list.size(): ${list.size()}"

    def r = list.size() ? list.tail() : null
    println "r: $r"
    return r
}
def "tailIfAny() calls tail()"() {

    setup:
    def list = Spy(ArrayList)
    list << 'a'
    list << 'b'

    when:
    println "list ${list} -- ${list.size()}"
    println "Before tailIfAny()"
    list.tailIfAny()
    println "After tailIfAny()"

    then:
    1 * list.tail()
}
Too few invocations for:

1 * list.tail()   (0 invocations)

Unmatched invocations (ordered by similarity):

1 * list.toArray()
1 * list.iterator()
3 * list.size()
1 * list.isEmpty()


    at org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:78)
    at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:76)
    at com.fgi.extensions.ListExtensionsTests.add element in setup(ListExtensionsTests.groovy:65)
list [a, b] -- 2
Before tailIfAny()
tailIfAny() list.size(): 2
r: [b]                      // This tells me that tail() is being called.
After tailIfAny()

有人能解释一下为什么Spock认为tail()没有被调用吗?还是我错过了什么?

谢了。

共有1个答案

濮阳唯
2023-03-14

从技术上讲,tail()不会在list对象上调用(ArrayList没有声明这样的方法)。因此,基于代理的spy()没有机会截获调用。尝试使用groovyspy()

 类似资料:
  • 本文向大家介绍groovy 调用方法,包括了groovy 调用方法的使用技巧和注意事项,需要的朋友参考一下 示例 请注意,如果在某些元素上不存在该方法,则在集合中混合类型时,groovy.lang.MissingMethodException可能会引发a:            

  • 我试图理解当我遇到诸如“groovy.lang.MissingMethodException:无方法签名:Three.method()适用于参数类型”之类的错误时会发生什么:

  • 我已经使用Groovy几年了,但不是在最近几个月,所以这可能只是一个新手问题。我试图解析日志文件,但当我尝试这样做时: 我得到了这个例外: 线程“main”groovy.lang.missingmethodException中的异常:方法:java.text.SimpleDateFormat.parse()的签名不适用于参数类型:(java.lang.string,ce.readscript.tm

  • 解决方案是什么?只有4-5行代码隐藏并重新启动,然后完全成功运行,引导文件大小为149k。当我注释或删除4-5行代码时,它将无误运行!

  • 我是groovy的新手。我有这样的代码。 串味 从这个客户端映射中,我需要迭代appName和enable的值。为此,我使用了get方法。。。我对此不确定。 使用此get方法时,我遇到以下错误。因为我是groovy新手,所以我不知道这里发生了什么 棒极了。lang.MissingMethodException:没有方法com的签名。康卡斯特。csv。哈克索。SecureFirebaseRestCl