模拟以bool作为参数的方法并返回List<>Moq

本文关键字:返回 List Moq 方法 bool 参数 模拟 | 更新日期: 2023-09-27 18:07:16

在我的测试中,我将数据定义为具有某些记录的List<IUser>

我想设置一个moq方法GetList,这个方法接收一个bool作为参数。我想返回IUser列表,其中IsValid为真。

我试过了:

Mock<IUsers> mockUserRepository = new Mock<IUsers>();
mockUserRepository.Setup(mr => mr.GetList(It.IsAny<bool>()))
    .Returns((bool i) => _users.Select(x => x.IsValid == i));

但是我得到这个错误:cannot convert List<bool> to List<IUser>

class User : IUser
{
   public bool IsValid { get; set; }
}
interface IUser
{
   bool IsValid { get; set; }
}
interface IUsers
{
    List<IUser> GetList(bool isActive);
}

模拟以bool作为参数的方法并返回List<>Moq

如果您想返回IUser列表,其中IsValid为true,当您应该返回IUser的列表时,而不是bool的集合,因此使用Where来过滤列表而不是Select

// returns IEnumerable<boolean>
.Returns((bool i) => _users.Select(x => x.IsValid == i)); 
应该

// returns List<IUser>
.Returns((bool i) => _users.Where(x => x.IsValid == i).ToList());