FakeItEasy 参数约束在 lambda 之外被评估为 null
FakeItEasy argument constraint being evaluated as null outside of lambda
使用 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);
是什么导致了这种行为?是故意的吗?
这是有意为之的行为。您可以在文档中查看 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,而不是因为为空而悄悄失败。
使用 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);
是什么导致了这种行为?是故意的吗?
这是有意为之的行为。您可以在文档中查看 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,而不是因为为空而悄悄失败。