2015-07-20 70 views
15

我試圖嘲弄一個存儲庫的方式類似起訂量ReturnsAsync()的參數

public async Task<WhitelistItem> GetByTypeValue(WhitelistType type, string value) 
使用起訂量ReturnsAsync

,像這樣:

static List<WhitelistItem> whitelist = new List<WhitelistItem>(); 

var whitelistRepositoryMock = new Mock<IWhitelistRepository>(); 

whitelistRepositoryMock.Setup(w => w.GetByTypeValue(It.IsAny<WhitelistType>(), It.IsAny<string>())) 
            .ReturnsAsync((WhitelistType type, string value) => 
            { 
             return (from item in whitelist 
               where item.Type == type && item.Value == value 
               select item).FirstOrDefault(); 
            }); 

,但我發現在這個錯誤行」 ...... ReturnsAsync((WhitelistType類型...):

無法轉換lambda表達式鍵入 'Model.WhitelistItem',因爲它 不是委託類型

WhitelistType就是這樣一個枚舉:

public enum WhitelistType 
    { 
     UserName, 
     PostalCode 
    } 

我搜查小時,並沒有發現任何回答我的問題。

任何線索?

回答

32

ReturnsAsync沒有lambda版本不像Returns之一。

修復:使用ReturnsTask.FromResult

.Returns((WhitelistType type, string value) => 
    { 
     return Task.FromResult(
      (from item in whitelist 
       where item.Type == type && item.Value == value 
       select item).FirstOrDefault() 
      ); 
    }); 
+2

看起來像你需要指定拉姆達委託參數的類型(WhitelistType類型,字符串值) – BozoJoe

+0

是有可能返回傳遞到方法的參數異步返回類型,所以在---> Task out中的實例? (同樣的例子你) – Choco

+0

@Choco不知道你想做什麼 - 考慮問它作爲一個問題,而不是顯示實際的代碼(也許你正在尋找'return Task.FromResult(value)')... –