在我的测试中,我将数据定义为List<IUser>
,其中包含一些记录。
我想为方法GetList设置moq,此方法接收List<int>
作为参数。这是一个ID列表;我想在List<IUser>
我尝试了这个,但是我没有找到正确的返回语法
Mock<IUsers> mockUserRepository = new Mock<IUsers>();
_mockUserRepository.Setup(m => m.GetListAll(It.IsAny<List<int>>())).Returns(????????);
我试过这样的事情:
_mockUserRepository.Setup(m => m.GetListAll(It.IsAny<List<int>>())).Returns(u =>_users.Contains(???));
谢谢,
class User : IUser
{
public int Id { get; set; }
public string Firsname { get; set; }
public string Lastname { get; set; }
}
interface IUser
{
int Id { get; set; }
string Firsname { get; set; }
string Lastname { get; set; }
}
interface IAction
{
List<IUser> GetList(List<int> listId);
}
class Action : IAction
{
public List<IUser> GetList(List<int> listId)
{
//....
}
}
答案 0 :(得分:9)
试试这个:
mock.Setup(users => users.GetListAll(It.IsAny<List<int>>()))
.Returns<List<int>>(ids =>
{
return _users.Where(user => ids.Contains(user.Id)).ToList();
});
答案 1 :(得分:0)
只需返回准备好的清单:
_mockUserRepository.Setup(m => m.GetListAll(It.IsAny<List<int>>())).Returns(_users);
答案 2 :(得分:0)
如果您将多个参数作为一个过滤器参数,则可以使用此示例
mock.Setup(o => o.GetListAllAsync(It.IsAny<List<int>>(), It.IsAny<string>())
.ReturnsAsync((int[] ids, string firstname) =>
{
return _users
.Where(user => ids.Contains(user.Id) && user.Firstname.Equals(firstname))
.ToList();
});