Chciałbym ustawić metodę z Moq dwukrotnie, ale wydaje się, że ostatnia nadpisuje poprzednie. Oto moja początkowa konfiguracja:Jak ustawić metodę dwukrotnie dla różnych parametrów z próbą
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
});
ta działa obecnie w porządku, ale chcę to wrócić new ValidUserContext()
jeżeli nazwa użytkownika lub hasło jest raczej niż username
i password
zmiennych jak wyżej. Aby to zrobić, dodałem inną konfigurację, ale tym razem to nadpisuje nad jednym i zawsze stosuje się go:
membershipServiceMock.Setup(ms =>
ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns(
new ValidUserContext()
);
Jaki jest najbardziej elegancki sposób obsługi tego typu sytuacjach Min?
Edit
I rozwiązać problem z poniższej podejścia, ale myślę, że istnieje lepszy sposób obsługi to:
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()
);
Pierwsze rozwiązanie nie obsługuje przypadku, gdy u == nazwa użytkownika i p! = Hasło, czy to prawda? –