写点什么

C# 8 将为断言和自动化测试带来 Caller Expression Attribute

  • 2019-01-29
  • 本文字数:756 字

    阅读完需:约 2 分钟

C# 8将为断言和自动化测试带来Caller Expression Attribute

C#和其他的.NET 编程语言有一个叫作Caller Information Attribute的概念。在参数上应用这些属性时,开发人员就可以不负责提供匹配参数,把这些事情留给了编译器。目前,C#支持文件名或路径、行号以及调用方法或属性名的 Caller Information Attribute。根据“Caller Expression Attribute”提案,表达式也将支持 Caller Information Attribute。


考虑以下这对断言:


Assert.IsTrue(x - 7 > 0);Assert.IsTrue(y - 3 > 0);
复制代码


如果测试失败,很难确定是哪个断言被触发。你可以为每个断言提供一条消息,但这样做很枯燥乏味,而且很容易就过时,如果表达本身可以被捕获就好了。


public static void IsTrue(bool condition, [CallerArgumentExpression("condition")] string message = null);
复制代码


在这个示例中,如果开发人员未明确提供消息,那么编译器会将会使用 condition 参数对应的代码。本质上,编译器将代码转换为如下所示的形式:


Assert.IsTrue(x - 7 > 0, "x - 7 > 0");Assert.IsTrue(y - 3 > 0, "y - 3 > 0");
复制代码


根据提案的设计,这种捕获机制甚至可以被用在扩展方法上。


潜在的问题


这个设计存在三个问题。


如果提供的参数是 null 或者不是参数名的字符串,那么编译器将传入一个空字符串。

知道如何使用反编译器的人将能够通过反编译看到标有这个属性的方法的一些源代码。对于闭源软件来说,这可能是难以接受的。

虽然这不是功能本身的缺陷,但问题是现在存在一个只接受 bool 的 Debug.Assert API。即使重载方法的第二个参数使用了这个属性,并且是可选的,编译器仍然会选择非消息的那个参数。因此,非消息重载会被移除,这将造成二进制(尽管不是源代码)的突破性变更。


状态


目前,Caller Expression Attribute 被列在C# 8路线图中,状态为“Prototype”。


查看英文原文https://www.infoq.com/news/2019/01/Caller-Expression-Attribute


2019-01-29 08:004829
用户头像

发布了 731 篇内容, 共 484.9 次阅读, 收获喜欢 2008 次。

关注

评论

发布
暂无评论
发现更多内容

聊聊那些奇葩的代码规范 —— 滥用静态导入

HoneyMoose

科兴未来|第六届中国·南宁海(境)外人才创新创业大赛

科兴未来News

天翼云SD-WAN解决方案直播

天翼云开发者社区

云计算 服务器 云服务

【零售电商系列】走进亚马逊(二)

小诚信驿站

6 月 优质更文活动

海外直播源码技术文字聊天功能的配置

山东布谷科技

软件开发、 区块链二维码溯源系统开发 源码搭建 直播源码 海外直播源码

【架构设计】【问题分析】记一次调用内部es服务超时问题

如果晴天

架构设计 问题定位 问题分析 日志平台 失败策略

《弥合鸿沟——2023校园招聘调研报告&备战攻略》重磅发布!一文速览10大关键发现

用友BIP

招聘 人才 校招

全球LED租赁屏市场

Dylan

LED 市场 规模化 全球 技术指南

当中间件遇到云原生,看看会发生什么事

金蝶天燕云

云原生中间件 中间件套件

我对混沌工程的理解

老张

混沌工程

openEuler22+GreatSQL+dbops玩转MGR

GreatSQL

MySQL 高可用 greatsql greatsql社区

深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

汀丶人工智能

人工智能 深度学习 计算机视觉 语义分割算法 6 月 优质更文活动

Terraform 改善基础架构的十个最佳实践

SEAL安全

Terraform 基础架构 企业号 6 月 PK 榜

软件测试/测试开发丨Allure2报告中添加附件-日志

测试人

程序员 软件测试 测试开发 Allure

对线面试官-为什么要使用MQ

派大星

Java 面试题

Springboot整合RabbitMQ生产端和消费端

不觉心动

6 月 优质更文活动

ESP8266调用NTP服务器进行时间校准

DS小龙哥

6 月 优质更文活动

趋吉避凶、取名问卜!大语言模型再算命领域有哪些应用

FN0

AIGC

文件管理开发指南全新登场,快来了解如何访问各类文件

HarmonyOS开发者

HarmonyOS

活动预告|6月15 日 Apache Paimon Meetup,深入解读 Apache Paimon 0.4.0 !

Apache Flink

大数据 flink 社区活动

想给业务松松绑,又怕数据泄漏隐患? 动态脱敏了解一下!

极盾科技

数据安全

新斗罗大陆游戏详细图文架设教程

echeverra

斗罗大陆

文末有奖品 | 开放原子全球峰会最新剧透,给我冲!

KaiwuDB

数据库

火热报名 |【崖山论“见”】第3期,如何让SQL速度飞起来

YashanDB

数据库 sql 技术沙龙 优化器 技术干货

深度学习应用篇-计算机视觉-语义分割综述[6]:DeepLab系列简介、DeepLabV3深入解读创新点、训练策略、主要贡献

汀丶人工智能

人工智能 深度学习 计算机视觉 语义分割算法 6 月 优质更文活动

纠删码技术在vivo存储系统的演进【上篇】

vivo互联网技术

分布式存储 磁盘故障 纠删码 数据可靠性

小程序容器与PWA有什么不同?

没有用户名丶

人工智能正在使代码普惠化!未来五年人人都能编程

FN0

软件测试/测试开发丨Allure2报告中添加附件-html、视频

测试人

程序员 软件测试 自动化测试 测试开发 Allure

定时任务原理方案综述 | 京东云技术团队

京东科技开发者

定时任务 线程 中间件 分布式定时任务 企业号 6 月 PK 榜

C# 8将为断言和自动化测试带来Caller Expression Attribute_语言 & 开发_Jonathan Allen_InfoQ精选文章