के साथ विभिन्न पैरामीटर के लिए दो बार विधि को कैसे सेट अप करें, मैं दो बार 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()
);
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 = principal
}
: new ValidUserContext()
);
पहला समाधान केस को संभाल नहीं करता है जब आप == उपयोगकर्ता नाम और पी! = पासवर्ड, या करता है? –