相关疑难解决方法(0)

如何使用mock为不同的参数设置两次方法

我想用Moq设置一个方法两次,但似乎最后一个覆盖了之前的方法.这是我的初始设置:

string username = "foo";
string password = "bar";

var principal = new GenericPrincipal(
    new GenericIdentity(username),
    new[] { "Admin" });

var membershipServiceMock = new Mock<IMembershipService>();
membershipServiceMock.Setup(ms =>
    ms.ValidateUser(username, password)
).Returns(new ValidUserContext { 
    Principal = principal
});
Run Code Online (Sandbox Code Playgroud)

这很好但我希望这返回new ValidUserContext()如果用户名或密码而不是上面的usernamepassword变量.为此,我添加了另一个设置,但这次它会覆盖上面的设置并始终应用它:

membershipServiceMock.Setup(ms =>
    ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns(
    new ValidUserContext()
);
Run Code Online (Sandbox Code Playgroud)

使用Moq处理此类情况的最优雅方式是什么?

编辑

我通过以下方法解决了问题,但我想有更好的方法来处理这个问题:

var membershipServiceMock = new Mock<IMembershipService>();
membershipServiceMock.Setup(ms =>
    ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns<string, string>((u, p) => 
    (u == username && p == password) ?
    new ValidUserContext { 
        Principal …
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing moq

43
推荐指数
3
解决办法
3万
查看次数

标签 统计

.net ×1

c# ×1

moq ×1

unit-testing ×1