C# 如何使用Moq传递列表参数

C# 如何使用Moq传递列表参数,c#,moq-3,C#,Moq 3,我试图模拟一个采用两个参数的方法,该方法的签名如下所示: User DoSomething(User user, List<Role> newRoleList); User DoSomething(User-User,List-newRoleList); 我希望此方法仅在“newRoleList”参数包含一些预定义角色和特定用户名时返回某些内容。因此,我没有使用It.IsAny而是尝试使用It.Is。我面临的问题是第二个参数。如何设置第二个参数 我正在努力实现这样的目标: Lis

我试图模拟一个采用两个参数的方法,该方法的签名如下所示:

User DoSomething(User user, List<Role> newRoleList);
User DoSomething(User-User,List-newRoleList);
我希望此方法仅在“newRoleList”参数包含一些预定义角色和特定用户名时返回某些内容。因此,我没有使用
It.IsAny
而是尝试使用
It.Is
。我面临的问题是第二个参数。如何设置第二个参数

我正在努力实现这样的目标:

List<Role> roleList = new List<Role>()
    {
        new Role() { RoleName="RoleOne}, 
        new Role() { RoleName="RoleTwo"}
    };

mockComponent.Setup(x => x.UpdateUserRoles(
                            It.Is<User>(user1 => user1.UserName == "DummyUser"), 
                            It.Is<List<Role>>(y=>y==roleList)
                    ))
             .Returns(user);
List roleList=新列表()
{
新角色(){RoleName=“RoleOne},
新角色(){RoleName=“RoleTwo”}
};
mockComponent.Setup(x=>x.UpdateUserRoles(
It.Is(user1=>user1.UserName==“DummyUser”),
It.Is(y=>y==roleList)
))
.退货(用户);
但是它总是返回“null”。如果我将第二个参数更改为
It.IsAny()
,那么它将返回一个正确的值


请建议如何实现这一点,是否有更好的方法提供特定列表作为参数或什么?

最后我找到了解决方案,我需要在设置中指定如何将两个列表同等对待的标准

我已将代码更改为:

mockComponent.Setup(x=>x.UpdateUserRoles(It.Is(user1=>user1.UserName==“DummyUser”),It.Is>(y=>y[0]。RoleName==“RoleOne”&&y[1]。RoleName==“RoleTwo”)。返回(user)


它工作起来很有魅力。

最后我找到了解决方案,我需要在设置中指定如何平等对待两个列表的标准

我已将代码更改为:

mockComponent.Setup(x=>x.UpdateUserRoles(It.Is(user1=>user1.UserName==“DummyUser”),It.Is>(y=>y[0]。RoleName==“RoleOne”&&y[1]。RoleName==“RoleTwo”)。返回(user)

它很有魅力