我想用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
});
这工作了罚款,但我想这回new ValidUserContext()
如果用户名或密码,而不是username
和password
变量如上。要做到这一点,我又增加了设置,但是这一次它会覆盖上述之一,并始终应用它:
membershipServiceMock.Setup(ms =>
ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns(
new ValidUserContext()
);
什么是处理这种类型的与起订量的情况下最优雅的方式?
编辑
我解决了下面的方法的问题,但我想有处理这更好的方式:
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 = principal
}
: new ValidUserContext()
);
第一个解决方案不处理u ==用户名和p!=密码的情况,还是它呢? –