2012-10-01 128 views
2

我嘗試關閉Moq頁面的一半鏈接已損壞,其中包括一個用於their official API documentation的鏈接。所以我會在這裏問。Moq - 嘲笑多個參數

我已經成功地使用一個單一的「一網打盡」參數,像這樣:

mockRepo.Setup(r => r.GetById(It.IsAny<int>())).Returns((int i) => mockCollection.Where(x => x.Id == i).Single()); 

但我無法弄清楚如何與多個參數來實現相同的行爲。

mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>())).Returns(.....); 

....是我弄不清楚的部分。


編輯迴應喬丹:

的問題是如何表示的3個參數,而不只是一個。

如何打開:

(int i) => mockCollection.Where(x => x.Id == i) 

到:

(int i), (string s), (int j) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == j) 
+0

「退貨」應該與第一種情況相同。您遇到的問題是什麼? –

+0

@JordanKaye看我的編輯。 – Terry

回答

3

這幾乎是一樣用一個參數:

.Returns((int i, string s, int x) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x)); 

或者使用收益的通用變種:

.Returns<int, string, int>((i, s, x) => mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x)); 
+0

fml ...第一個是我正在尋找的。其他符號也很好理解,謝謝。 – Terry

3

我想你需要的是:

mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>())).Returns<int,string,int>((id, someProp, someOtherProp) => 
       mockCollection.Where(x => x.Id == i && x.SomeProp == s && x.SomeOtherProp == x)); 
1

你是說你怎麼寫正確的拉姆達?

mockRepo.Setup(r => r.GetByABunchOfStuff(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<int>())) 
     .Returns((int i, string s, int i2) => doSomething());