如何使用Moq传递List参数
本文关键字:List 参数 传递 Moq 何使用 | 更新日期: 2023-09-27 18:22:41
我正在尝试模拟一个使用两个参数的方法,该方法的签名如下:
User DoSomething(User user, List<Role> newRoleList);
只有当"newRoleList"参数中包含一些预定义的角色和特定的用户名时,我才希望此方法返回一些内容。因此,我尝试使用It.Is<>
,而不是使用It.IsAny<>
。我面临的问题是第二个参数。如何设置第二个参数?
我正在努力实现这样的目标:
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);
但这总是返回"null"。如果我将第二个参数更改为It.IsAny<List<Role>>()
,那么它将返回一个适当的值。
请建议如何实现这一点,有没有更好的方法来提供特定的列表作为参数或什么?
最后我找到了解决方案,我需要在设置中指定如何平等对待两个列表的标准。
我已将代码更改为:
mockComponent
.Setup(
x => x.UpdateUserRoles(
It.Is<User>(user1 => user1.UserName == "DummyUser"),
It.Is<List<Role>>(y=>y[0].RoleName=="RoleOne" && y[1].RoleName=="RoleTwo")))
.Returns(user);
它就像一个符咒。。