【问题标题】:FakeItEasy & "params" argumentsFakeItEasy 和“参数”参数
【发布时间】:2011-10-19 23:18:29
【问题描述】:

我有一个带有以下签名的方法。

Foo GetFooById( int id, params string[] children )

此方法定义在名为 IDal 的接口上。​​

在我的单元测试中,我写了以下内容:

IDal dal = A.Fake<IDal>();

Foo fooToReturn = new Foo();
fooToReturn.Id = 7;

A.CallTo(()=>dal.GetFooById(7, "SomeChild")).Returns(fooToReturn);

测试运行时,签名与第二个参数不匹配。我尝试将其更改为:

A.CallTo(()=>dal.GetFooById(7, new string[]{"SomeChild"})).Returns(fooToReturn);

但这也不成功。我可以让它工作的唯一方法是使用:

A.CallTo(()=>dal.GetFooById(7, A<string[]>.Ignored )).Returns(fooToReturn);

我希望能够指定第二个参数的值,这样如果有人更改它,单元测试就会中断。

【问题讨论】:

    标签: fakeiteasy


    【解决方案1】:

    更新:我不确定何时,但问题早已解决。 FakeItEasy 2.0.0 支持开箱即用的所需行为。

    在解析调用规范时可能会特殊情况下的参数数组。请提交问题至:https://github.com/patrik-hagne/FakeItEasy/issues?sort=created&direction=desc&state=open

    在那之前,最好的解决方法是:

    A.CallTo(() => dal.GetFooById(7, A<string[]>.That.IsSameSequenceAs("SomeChild"))).Returns(fooToReturn);
    

    【讨论】:

    • 优秀。起初它仍然无法正常工作,但是当我将其更改为 A.That.IsSameSequenceAs(new string[] { "SomeChild" }) 时,它就像一个魅力。
    • 我还应要求在github上添加了一个问题。
    • 太好了,我会尝试解决这个问题。
    • IsSameSequenceAs 的解决方法仍然可行吗?原始问题的其他变体以及 A.That.IsEqualTo() 不适用于 FakeItEasy 6.0
    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多