【问题标题】:Stubbing out parameters with pre-existing values in FakeItEasy在 FakeItEasy 中使用预先存在的值存根参数
【发布时间】:2016-05-28 03:58:16
【问题描述】:

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

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 时,我可以看到输出参数被记录为&lt;NULL&gt;,所以我怀疑当输出目标已经设置为某个值时它们不匹配。我尝试将测试中的ignored 设置为new List&lt;Foo&gt;(),也尝试了A&lt;List&lt;Foo&gt;&gt;.Ignored,但对结果都没有任何影响。

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

【问题讨论】:

    标签: c# fakeiteasy


    【解决方案1】:

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

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

    最终代码为:

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

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

    【讨论】:

    • 不,这就是解决方案。多年来我一直在考虑一个很好的语法,但从来没有想出任何“相当有”的东西,如果你有任何想法,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2016-10-16
    • 2012-06-18
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多