2

2 つのパラメーターを受け取るメソッドをモックしようとしています。メソッドのシグネチャは次のようになります。

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

「newRoleList」パラメーターに事前定義されたロールと特定のユーザー名が含まれている場合にのみ、このメソッドが何かを返すようにします。を使用する代わりに、 を使用It.IsAny<>しようとしていますIt.Is<>。私が直面している問題は、2番目のパラメーターにあります。この 2 番目のパラメーターを設定するにはどうすればよいですか?

私はこのようなものを達成しようとしています:

    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」を返しています。2 番目のパラメーターを に変更するとIt.IsAny<List<Role>>()、適切な値が返されます。

これを達成する方法を提案してください。特定のリストをパラメーターとして提供するためのより良い方法はありますか?

4

1 に答える 1

2

最後に解決策を見つけました。セットアップで、2 つのリストを同等に扱う方法の基準を指定する必要があります。

コードを次のように変更しました。

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

それは魅力のように働いています..

于 2013-07-17T10:22:59.953 に答える