将FakeItEasy中已有值的参数截断

本文关键字:参数 FakeItEasy | 更新日期: 2023-09-27 18:21:15

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

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .Returns(something);

当存根方法被这样调用时,这不会有任何问题:

List<Foo> target;
var result = service.Method(out target);

然而,当target被预初始化时,它不起作用。例如:

List<Foo> target = new List<Foo>();
var result = service.Method(out target);

当我在fake上检查Tag时,我可以看到out参数被记录为<NULL>,所以当out目标已经设置为某个值时,我怀疑它们不匹配。我尝试过将测试中的ignored设置为new List<Foo>(),也尝试过A<List<Foo>>.Ignored,但两者都对结果没有任何影响。

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

将FakeItEasy中已有值的参数截断

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

,五分钟后,我找到了一个可接受的解决方案(在这种情况下)。由于我对传递给这个方法的参数不感兴趣,所以如果我使用WithAnyArguments()方法,那么它似乎可以工作;我想,这一定是把论点综合起来的捷径。

最后的代码是:

List<Foo> ignored;
A.CallTo(() => fake.Method(out ignored))
  .WithAnyArguments()
  .Returns(something);

如果我不想忽略所有参数,这显然不能解决问题。只有在没有更复杂的解决方案的情况下,我才会接受这个答案。