【问题标题】:Cannot invoke method leftshift() on null object in spock无法在 spock 中的空对象上调用方法 leftshift()
【发布时间】:2025-12-07 20:25:01
【问题描述】:

以下代码是 spock 测试的基本示例。当我运行它时,它会给出以下错误

Cannot invoke method leftshift() on null object

为什么会这样?如何让我的代码正常工作?

另外,leftshiftrightshift 在 spock 中的具体用途是什么。

import spock.lang.*;

class Publisher {
     List <Subscriber> subscribers      
     void send (String message){}   
}

interface Subscriber {
    void receive(String message)
}

public class Test1 extends Specification {

    Publisher publisher = new Publisher()
    def subscriber = Mock(Subscriber)
    def subscriber2 = Mock(Subscriber)

    def setup() {           
        (publisher.subscribers) << subscriber
        (publisher.subscribers) << subscriber2
    }

    def "should send message to subscriber"() {

        when:
        publisher.send("hello")

        then:
        1 * subscriber.receive("hello")
        1 * subscriber2.receive("hello")
    }
}

【问题讨论】:

    标签: java unit-testing groovy spock


    【解决方案1】:

    这是您的 Publisher 类中的一个错误,它没有初始化其 subscribers 字段(因此是 NPE)。 list &lt;&lt; elemlist.add(elem) 的 Groovy 快捷方式。要了解有关使用 Spock 模拟的更多信息,请访问 http://docs.spockframework.org

    PS:请不要在此处和http://forum.spockframework.org 上重复发布(两者都可以)。

    【讨论】:

    • 以及如何解决这个错误?这个错误是否在某处被报告为问题?