FakeItEasy 参数约束在 lambda 之外被评估为 null

本文关键字:评估 null 参数约束 lambda FakeItEasy | 更新日期: 2023-09-27 18:35:46

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

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

FakeItEasy 参数约束在 lambda 之外被评估为 null

这是

预期行为。您可以在文档中看到始终将IgnoredThat放在A.CallTo内部分

从FakeItEasy 2.0.0开始,FakeItEasy在存储为变量并被调用时会引发异常,而不是因为为空而悄悄失败。