Moq检索特定列表项

时间:2014-02-25 09:39:07

标签: c# unit-testing moq

我目前有这样的Moq表达

repo.Setup(r => r.GetProjectConfigurationById(It.Is<int>(s => s == response.Id))) 
    .Returns(response); // return response only if id matches setup one

可以看出,响应是一个拥有自己的Id字段的对象。 现在我有一个List<responses>,并希望将此表达式转换为行为如此:

  • 获取任何整数Id
  • 如果Id正在计算response.Id,则返回列表中的该元素。
  • 可选地,如果未找到匹配项,请返回null

我怎么能用Moq做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用It.IsAny<int>()匹配GetProjectConfigurationById

中的任何参数

还有Returns函数的重载,您可以使用传入GetProjectConfigurationById的参数指定自定义条件,以按ID查找元素或返回null:

var responses = new List<Response>();
//...
repo.Setup(r => r.GetProjectConfigurationById(It.IsAny<int>()))
    .Returns<int>(id => responses.SingleOrDefault(r => r.Id == id));