2014-09-05 105 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(無論是罰款)雙重張貼。

相關問題