我試圖使用Specs2和Mockito測試一些Scala代碼。我對三者都比較陌生,並且在模擬方法返回null時遇到困難。Scala,Specs2,Mockito和null返回值
在下面(有一些名稱的變化轉錄)
"My Component's process(File)" should {
"pass file to Parser" in new modules {
val file = mock[File]
myComponent.process(file)
there was one(mockParser).parse(file)
}
"pass parse result to Translator" in new modules {
val file = mock[File]
val myType1 = mock[MyType1]
mockParser.parse(file) returns (Some(myType1))
myComponent.process(file)
there was one(mockTranslator).translate(myType1)
}
}
「通行證文件分析器」的作品,直到我加入了SUT譯者呼叫,然後死因爲mockParser.parse
方法返回一個空,譯者碼無法使用。
同樣,「將解析結果傳遞給翻譯器」,直到我嘗試在SUT中使用翻譯結果爲止。
這兩種方法的實際代碼不能返回null,但我不知道如何告訴Mockito使期望返回可用結果。
我當然可以通過在SUT中設置空檢查來解決這個問題,但我寧願不要,因爲我確保永遠不會返回空值,而是使用Option
,None
和Some
。
指針,以良好的斯卡拉/ Specs2 /的Mockito教程將是美好的,因爲會如何改變像
there was one(mockParser).parse(file)
線,使其返回的東西,它允許在SUT時,繼續執行一個簡單的例子它不涉及空值。
揮舞約試圖弄清楚這一點,我試圖改變該行
there was one(mockParser).parse(file) returns myResult
與myResult的值是我想要返回的類型。這給了我一個編譯錯誤,因爲它期望在那裏找到MatchResult
而不是我的返回類型。
如果很重要,我使用的是Scala 2.9.0。
我在第二個測試的存根使用這個,但問題是在期望而不是存根。我會編輯澄清。 –
我已經完成了編輯,現在我將查看您鏈接的頁面。我想我以前看過,但可能錯過了之前閱讀的一條重要線索。 –
我已經編輯了我的答案 – Nicolas