【问题标题】:How to pass a List parameter using Moq如何使用 Moq 传递 List 参数
【发布时间】:2013-07-17 09:57:14
【问题描述】:

我试图模拟一个带有两个参数的方法,方法的签名如下:

User DoSomething(User user, List<Role> newRoleList);

我希望此方法仅在“newRoleList”参数包含一些预定义的角色和其中的特定用户名时才返回某些内容。所以我没有使用It.IsAny&lt;&gt;,而是尝试使用It.Is&lt;&gt;。我面临的问题是第二个参数。如何设置第二个参数?

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

    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&lt;List&lt;Role&gt;&gt;(),那么它会返回一个正确的值。

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

【问题讨论】:

    标签: c# moq-3


    【解决方案1】:

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

    我已将代码更改为:

    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);
    

    它就像一个魅力..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2011-11-30
      • 2014-12-04
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多