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
行的正上方放置了一个断点,fooConstraint
和 barConstraint
的值都是null
的。
但是,当我像这样设置断言时,它会通过:
A.CallTo(() =>
fakedTool.ObservedFunction(
A<Foo>.That.Matches(f => f.Name.Equals('Alice')),
A<Bar>.Ignored
)
).MustHaveHappened(Repeated.Exactly.Once);
是什么导致了这种行为?是有意的吗?
这是
预期行为。您可以在文档中看到始终将Ignored
和That
放在A.CallTo
内部分。
从FakeItEasy 2.0.0开始,FakeItEasy在存储为变量并被调用时会引发异常,而不是因为为空而悄悄失败。