【问题标题】:FakeItEasy argument constraint being evaluated as null outside of lambdaFakeItEasy 参数约束在 lambda 之外被评估为 null
【发布时间】:2016-02-22 17:39:50
【问题描述】:

使用 FakeItEasy,在我的一项测试中,我的设置类似于下面的设置,并且在这样设置时,底部的 CallTo 断言失败。

var fakedTool = A.Fake<ITool>();

var concreteUnderTest = new Concrete(fakedTool);

concreteUnderTest.doSomething();

var fooConstraint = A<Foo>.That.Matches(f => f.Name.Equals('Alice'));
var barConstraint = A<Bar>.Ignored;

A.CallTo(() => fakedTool.ObservedFunction(fooConstraint , barConstraint))
    .MustHaveHappened(Repeated.Exactly.Once);

我在CallTo这一行的正上方放了一个断点,fooConstraintbarConstraint的值都是null

但是,当我这样设置断言时,它通过了:

A.CallTo(() =>
    fakedTool.ObservedFunction(
        A<Foo>.That.Matches(f => f.Name.Equals('Alice')),
        A<Bar>.Ignored
    )
).MustHaveHappened(Repeated.Exactly.Once);

是什么导致了这种行为?是故意的吗?

【问题讨论】:

    标签: c# .net unit-testing tdd fakeiteasy


    【解决方案1】:

    这是预期的行为。您可以在文档中查看Always place Ignored and That inside A.CallTo 部分。

    从 FakeItEasy 2.0.0 开始,FakeItEasy will throw an exception when they're stored as variables and invoked,而不是因为为空而悄悄失败。

    【讨论】:

    • 你不妨接受这个答案,向读者表明它是正确的。
    • @BlairConrad SO 在 2 天内阻止接受您自己的答案 - 我会接受 :)
    • 啊。我不知道。很抱歉打扰了。
    • 没问题@BlairConrad!直到我昨天尝试点击接受时才知道:P
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多