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

迪伦·比蒂

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能在JUnit中定义期望的ParseException?

为什么我不能在定义中定义变量?

为什么我不能在代码中删除中间变量?

为什么我不能在班级中访问变量。Python

为什么我不能在期望父类列表的函数中引用子类列表?

为什么不能在lambda函数中更改通过复制捕获的变量的值?

为什么我不能在Java中抛出或捕获泛型类的实例?

为什么我不能在BlueSnap API中捕获PayPal交易?

为什么我不能在子字符串中捕获一个以上的数字?

为什么数据成员不能在Lambda捕获列表中

为什么不能在lambda中捕获此按引用('&this')?

为什么信号不能在 Perl 的模块中捕获

为什么我不能在PHP函数中访问我的私有变量?

为什么我不能在 PHP 7 中访问我的会话变量?

为什么我不能在我的 HTML 中为 Typescript 设置全局电子变量?

为什么我不能在方法之外调用变量?

为什么我不能在变量中转义小数?

为什么我不能在self是类的协议扩展中更改变量?

为什么我不能在PHP中为类变量定义连接字符串?

为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

为什么我不能在Python中设置全局变量?

为什么我不能在 react-native 中读取变量

为什么我不能在“ Prolog + C”中存储一个变量的地址?

为什么我不能在zsh中定义一个名为path的只读变量?

为什么我不能在React类组件中创建变量?

为什么我不能在 Django 中再次使用相同的变量?

为什么我不能在__destruct()方法中设置会话变量?

为什么我不能在flutter中输入用于title的变量?

为什么我不能在C中的函数外部给全局变量赋值?