gpt4 book ai didi

c# - 为什么我不能在变量中捕获 FakeItEasy 期望值?

转载 作者:太空狗 更新时间:2023-10-29 21:16:25 29 4
gpt4 key购买 nike

我正在使用 FakeItEasy 伪造一些 Entity Framework 调用,以确保正确映射一堆奇怪的遗留数据库表。

我需要断言,正在将具有匹配特定 DeliveryAddress 的发票的客户添加到数据库中。

如果我这样做:

A.CallTo(() => db.Customers.Add(
A<Customer>.That.Matches(
c => c.Invoices.First().Address == EXPECTED_ADDRESS)
)
)).MustHaveHappened();

代码完美运行。我想通过将期望移到别处来简化语法,但是当我这样做时:

var expected = A<Customer>.That.Matches(
c => c.Invoices.First().Address == EXPECTED_ADDRESS)
);
A.CallTo(() => db.Customers.Add(expected)).MustHaveHappened();

测试失败。 FakeItEasy 代码内部发生了什么,这意味着期望表达式在内联时有效,但不能在变量中捕获并在以后重用?

最佳答案

答案在 Always place Ignored and That inside A.CallTo 的文档中:

The Ignored (and _) and That matchers must be placed within the expression inside the A.CallTo call. This is because these special constraint methods do not return an actual matcher object. They tell FakeItEasy how to match the parameter via a special event that's fired then the constraint method is invoked. FakeItEasy only listens to the events in the context of an A.CallTo.

不过,令我惊讶的是“测试失败”。您使用的是什么版本?从 FIE 2.0.0 开始,像您一样使用 That should throw an exception喜欢

System.InvalidOperationException : A<T>.Ignored, A<T>._, and A<T>.That
can only be used in the context of a call specification with A.CallTo()

关于c# - 为什么我不能在变量中捕获 FakeItEasy 期望值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43781237/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com