This is a bit of an odd one. I'm trying to stub a method which has out parameters, I don't care about what the parameters are so I'm ignoring the arguments. It looks like this:
List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
.Returns(something);
This works without any problems when the stubbed method is called like so:
List<Foo> target;
var result = service.Method(out target);
However, it doesn't work when the target is pre-initialised. For example:
List<Foo> target = new List<Foo>();
var result = service.Method(out target);
When I inspect the Tag on the fake, I can see that the out parameters are being recorded as <NULL> so I suspect they're not matching when the out target is already set to something. I've tried setting the ignored in my test to new List<Foo>() and also tried A<List<Foo>>.Ignored but neither has any effect on the result.
So my question is, does anyone know how to stub a method with out parameters if the out parameter target already has a value?
Update: since FakeItEasy 1.23.0 the initial value of
outparameters is ignored when matching, so no need forWithAnyArguments, Five minutes later and I've found an acceptable solution (in this scenario). As I'm not interested in what arguments are passed to this method, so if I use the
WithAnyArguments()method then it seems to work; this must shortcut the argument checking all together, I guess.The final code is:
This obviously doesn't solve the problem if I don't want to ignore all the arguments. I'll only accept this answer if nobody has a more sophisticated solution.