2017-01-26 28 views
0

我有一個這樣的代碼:怎樣的方法添加到模擬斯卡拉上

class Object3 (
    param1: String 
    param2: String 
) 

class Object1 (
    param1: String 
    param2: Object2 
) extends Message 

class SampleClassSpec extends WordSpec with MockitoSugar { 
    "A sender" should { 
    "send a message" in { 
     val client = mock[Client] 
     var message = mock[Object1] 
     var detail = mock[Object2] 

     when(message.param2).thenReturn(detail) 
     when(message.param2.toJson).thenReturn(detail.toJson) // give me NPE 

     val sender = new Sender(client) 
     sender.prepareandsend(message) // second NPE 
     verify(client).send(message.param2.toJson.prettyPrint) 
    } 
    } 
} 

的問題是,我得到了NPE時,我想補充的方法來獲取格式化JSON,我不想發送整個Object1,只是Object3;我正在使用spray.json._。 如果我刪除給我NPE的線,那麼我得到了第二個NPE上的「準備和發送」

我的問題是我怎麼可以將這個方法添加到json.prettyPrint模擬? 或者也許有另一種方式來做到這一點。我是一個真正的初學者。

回答

0

嘗試:

when(param2.toJson).thenReturn(detail.toJson) 

代替。

或者,你可以看看使用Mockitos DEEP_STUBS機制。

+0

我試了一下它不會返回任何東西,相同的NPE。現在快速解決方案是用假數據創建Object1並將其添加到prepareandsend() – armandfp

1

我對斯卡拉一無所知,但之前我曾與Mockito合作過。 在我看來,問題是你沒有設置任何細節的行爲。 因爲它是一個模擬中,也沒有任何行爲,所以當你打電話detail.toJson

你應該添加一些行爲來詳細

when(detail.toJson).thenReturn(/* your JSON code */) 
+0

我也是一個初學者,但是例如,如果我只將.toSting它的工作原理告訴我爲什麼?我也沒有給出任何行爲。 – armandfp

+1

如果Scala與Java相同,那麼所有的類都默認從類Object繼承,它提供了.toString()的實現,所以這就是爲什麼detail.toString能夠工作 – Pox