2015-06-14 47 views
1

我想模擬一個具有多個參數的函數的對象。scalamock和多個參數的方法

我只是試圖設置它的期望。即,形式的服用點:

(item.addMetadata())期望( 「」, 「」, 「」, 「」, 「」, 「」 ,「」)

我只是不知道該怎麼寫。這個例子通常處理一個參數函數:(item.addMetadata _)。期望(「」)

如何處理多個參數?

EDIT1

我改變只是爲了編譯的緣故:

(item.addMetadata _) expects (where { 
     (schema: String, element: String, qualifier: String, lang: String, value: String) => true 
    }) 

現在的問題顯然是,該方法被重載?

我得到以下錯誤:

Error:(21, 15) ambiguous reference to overloaded definition, 
both method addMetadata in class Item of type (x$1: String, x$2: String, x$3: String, x$4: String, x$5: String, x$6: String, x$7: Int)Unit 
and method addMetadata in class Item of type (x$1: String, x$2: String, x$3: String, x$4: String, x$5: String)Unit 
match expected type ? 
     (item.addMetadata _) expects (where { 
      ^

的側面不是我也應該補充說,我正在嘲諷類而不是一個接口的事實。這是不受我控制的類,有一個私有的構造函數,只有一個靜態的創建方法。所以,我也得到了以下錯誤:

Error:(18, 24) constructor Item in class Item cannot be accessed in <$anon: org.dspace.content.Item> 
    val item = mock[Item] 
       ^
+0

我真的很難理解你在這裏試圖解決的問題。我以爲你最初的問題是關於重複的參數,現在我想知道如何模擬重載的方法?另外Scalamock不能嘲諷函數,特徵或接口以外的其他任何東西。如果你想模擬課程,你需要像Mockito這樣的東西。 –

+0

對不起,我結合了這件事,因爲我雖然錯誤可能是級聯。我發現解決方案將寫下答案 – MaatDeamon

+0

您的陳述不準確Travis:這是Scalamock應該支持的內容:ScalaMock爲幾乎所有的Scala功能提供完全類型安全的支持。這包括: 嘲諷類,特點和案例類 嘲諷的功能和運營商 嘲諷型parametrised和重載方法類型約束 支持重複參數 支持和命名參數 嘲諷的Java類和接口 – MaatDeamon

回答

1
(item.addMetadata _).expects(Seq("", "", "", "", "", "", "")) 

參見:http://scalamock.org/user-guide/advanced_topics/#example-5---repeated-parameters

+0

謝謝,其實我查了超載部分。這與我的情況相符。但我仍然遇到問題。我將重新編輯 – MaatDeamon

+0

回想起這個問題,我認爲我應該精​​確以下。我並沒有試圖用重複的參數string *來模擬一個方法。但是具有相同類型的參數的固定編號的函數:7個字符串參數。但是,該功能超載。 – MaatDeamon

2

我需要的是處理對象的重載的方法。我最初沒有弄清楚。

所以解決的辦法就是寫:

(item.addMetadata(_: String, _:String, _:String, _:String, _:String)) expects ("hi", "he", "hey", "test", "holla") 

不知道是什麼但是本來必要的,如果這不是一個重載的方法,這是我原來的問題的一部分。