Ben iki kez Moq ile bir yöntem kurmak istiyorum ama sonuncusu öncekileri geçersiz kılıyor gibi görünüyor. İşte benim ilk kurulum var:Farklı parametreler için bir yöntem iki kez nasıl sahte ile alay
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
});
Bu güzel çalışır ancak kullanıcı adı veya şifre yukarıdaki gibi username
ve password
değişkenler yerine ise bu new ValidUserContext()
dönmek istiyorum. Bunu yapmak için, başka bir kurulum eklendi ama her zaman yukarıda birini geçersiz kılar ve bu kez uygular:
membershipServiceMock.Setup(ms =>
ms.ValidateUser(It.IsAny<string>(), It.IsAny<string>())
).Returns(
new ValidUserContext()
);
MOQ ile durumların bu tür taşıma en zarif yolu nedir?
Düzenleme
aşağıda yaklaşımla sorunu çözüldü ama bu işleme daha iyi bir yolu olduğunu tahmin:
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()
);
İlk çözüm u == kullanıcı adı ve p! = Parola olduğunda durumu çözmüyor mu? –