Moq使用参数返回Async()
我正在尝试模拟存储库的方法
public async Task GetByTypeValue(WhitelistType type, string value)
使用Moq ReturnsAsync,如下所示:
static List whitelist = new List(); var whitelistRepositoryMock = new Mock(); whitelistRepositoryMock.Setup(w => w.GetByTypeValue(It.IsAny(), It.IsAny())) .ReturnsAsync((WhitelistType type, string value) => { return (from item in whitelist where item.Type == type && item.Value == value select item).FirstOrDefault(); });
但我在行中收到此错误“… ReturnsAsync((WhitelistType type …):
无法将lambda表达式转换为类型’Model.WhitelistItem’,因为它不是委托类型
WhitelistType是这样的枚举:
public enum WhitelistType { UserName, PostalCode }
我按小时搜索,没有找到任何问题的答案。
有什么线索吗?
ReturnsAsync
Returns
一个不同, ReturnsAsync
没有lambda版本。
修复:使用Returns
与Task.FromResult
.Returns((WhitelistType type, string value) => { return Task.FromResult( (from item in whitelist where item.Type == type && item.Value == value select item).FirstOrDefault() ); });
接受的答案已过时。 您现在可以将ReturnsAsync
与lambdas ReturnsAsync
使用,就像在问题的代码示例中一样。 无需再使用Task.FromResult()
。 您只需要指定lambda委托参数的类型。 否则,您将收到相同的错误消息:
无法将lambda表达式转换为类型’Model.WhitelistItem’,因为它不是委托类型
举个例子,以下内容适用于最新版本的Moq:
whitelistRepositoryMock.Setup(w => w.GetByTypeValue(It.IsAny(), It.IsAny())) .ReturnsAsync((WhitelistType type, string value) => { return (from item in whitelist where item.Type == type && item.Value == value select item).FirstOrDefault(); });