5

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

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);

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

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

4

1 回答 1

5

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

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

最终代码是:

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

如果我不想忽略所有论点,这显然不能解决问题。如果没有人有更复杂的解决方案,我只会接受这个答案。

于 2012-01-24T23:58:13.417 回答