With Moq, is it valid to have more than one Matching Argument?
It.Is<string>()
In this example I want the mockMembershipService to return a different ProviderUserKey depending on the User supplied.
mockMembershipService.Setup(
x => x.GetUser(
It.Is<string>(
s => s.Contains("Joe")))
.ProviderUserKey)
.Returns("1234abcd");
mockMembershipService.Setup(
x => x.GetUser(
It.Is<string>(
s => s.Contains("Tracy")))
.ProviderUserKey)
.Returns("5678efgh");
The SetUp defaults to the second statement rather than evaluating each on its own merits.
Isn’t it confusing? You are trying to mock GetUser method but you set the Returns for that function’s return value’s property. You also want to state return type’s property based on mocked method.
Here’s a way a more clear way:
Here’s a method to create the membership mock:
Then you write a method for setting that property: