我正在使用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代码内部发生了什么,这意味着期望表达式在内联时可以工作,但无法在变量中捕获并在以后重用?
答案是在文档“始终将被忽略的位置”和“ A.CallTo内的位置”中:
的
Ignored
(和_
)和That
匹配器必须放在内表达内A.CallTo
呼叫。这是因为这些特殊的约束方法不会返回实际的匹配器对象。他们告诉FakeItEasy如何通过触发的特殊事件来匹配参数,然后调用约束方法。FakeItEasy仅在的上下文中侦听事件A.CallTo
。
我很惊讶“测试失败”。您使用什么版本?作为外商投资企业2.0.0,使用That
像你一样应该抛出一个异常喜欢
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句