无法在spock中的null对象上调用方法leftshift()

时间:2014-09-05 04:45:50

标签: java unit-testing groovy spock

下面的代码是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")
    }
}

1 个答案:

答案 0 :(得分:5)

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

PS:请不要在这里和http://forum.spockframework.org双重发帖(两者都没问题。)