2014-09-05 109 views
2

下面的代码是spock测试的一个非常基本的示例。当我运行它,它提供了以下错误无法在spock中的空对象上调用方法leftshift()

Cannot invoke method leftshift() on null object

为什么和如何才能让我的代码工作?

另外,在spock中使用leftshiftrightshift究竟是什么。

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") 
    } 
} 

回答

6

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

PS:请不要在这里和http://forum.spockframework.org(无论是罚款)双重张贴。

相关问题