使用FakeItEasy中的预先存在的值来存取参数

Jam*_*ory 5 c# fakeiteasy

这有点奇怪.我试图存根一个有参数的方法,我不关心参数是什么,所以我忽略了参数.它看起来像这样:

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .Returns(something);
Run Code Online (Sandbox Code Playgroud)

当调用stubbed方法时,这样工作没有任何问题:

List<Foo> target;
var result = service.Method(out target);
Run Code Online (Sandbox Code Playgroud)

但是,在target预先初始化时它不起作用.例如:

List<Foo> target = new List<Foo>();
var result = service.Method(out target);
Run Code Online (Sandbox Code Playgroud)

当我检查Tag假的时,我可以看到out参数被记录为,<NULL>所以我怀疑当out目标已经设置为某些东西时它们不匹配.我已经尝试ignored在我的测试中设置new List<Foo>()并尝试A<List<Foo>>.Ignored但是对结果都没有任何影响.

所以我的问题是,如果out参数目标已经有值,有没有人知道如何使用out参数存根方法?

Jam*_*ory 5

更新:自FakeItEasy 1.23.0out,匹配时忽略参数的初始值,因此不需要WithAnyArguments

五分钟后,我找到了一个可接受的解决方案(在这种情况下).因为我对传递给这个方法的参数不感兴趣,所以如果我使用该WithAnyArguments()方法那么它似乎工作; 我想,这必须将参数检查一起缩短.

最终的代码是:

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .WithAnyArguments()
  .Returns(something);
Run Code Online (Sandbox Code Playgroud)

这显然如果我不解决这个问题并不想忽略所有的参数.如果没有人有更复杂的解决方案,我只接受这个答案.

  • 不,这是解决方案.多年来我一直在考虑一个很好的语法,但从来没有提出任何"相当"的东西,如果你有什么想法,请告诉我. (2认同)