写点什么

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:004688
用户头像

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

关注

评论

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

想做长期的 AB 实验?快来看看这些坑你踩了没

京东科技开发者

测试 测试原则 复盘归因 A/B 测试

GIithub/ipq4018/ipq4028/IPQ4019/IPQ4029/ipq4018/ipq4028/QSDK/wifi5 miniPIe/support openwrt

wallysSK

IPQ4019 ipq4029 IPQ4018 IPQ4028

如何使用Towify在小程序中配置微信登录

Towify

微信小程序 编辑器 无代码

BEVFormer-accelerate:基于EasyCV加速BEVFormer

阿里云大数据AI技术

深度学习 算法 计算机视觉 12 月 PK 榜

软件测试丨让工作更高效,搞定Git的分支管理

测试人

git GitHub 软件测试 自动化测试 测试开发

如何在 towify 中使用组件切换器配置“点赞”功能?

Towify

微信小程序 编辑器 无代码

matic链佛萨奇系统开发源代码快速部署上线

开发微hkkf5566

FL Studio2024永久免费版音乐程序

茶色酒

FL Studio FL Studio2023 FL Studio21

MacBook2023免费的系统电脑优化软件CleanMyMac

茶色酒

CleanMyMac CleanMyMac X CleanMyMac X2023

瓴羊Quick BI 权限管理:构建高效企业数据分析运行管理体系

夏日星河

仅用5个小时纯Java版实现羊了个羊,来看源码吧,还送你108套皮肤

非喵鱼

Java swing 小游戏 羊了个羊

使用Spring Data Redis 发布订阅消息

码语者

redis Spring Boot message

10个Python脚本来自动化你的日常任务

@下一站

Python 脚本 12月日更 12月月更

Karmada多云多集群生产实践专场圆满落幕

华为云开发者联盟

云原生 华为云 12 月 PK 榜

开发小游戏都有哪些难点?

FinFish

小游戏 小游戏开发 小程序游戏 微信小游戏

为什么 OpenCV 计算的视频 FPS 是错的

百度Geek说

OpenCV ffmpeg 12 月 PK 榜 帧率

【知识分享】关于电子元器件封装的几个小知识

华秋PCB

封装 PCB PCB设计

云服务器代理商选哪家好?理由是什么?

行云管家

云计算 服务器 云服务器

大咖说·施耐德|数智技术,企业绿色低碳转型的催化剂

大咖说

双碳 绿色转型

DHorse打包原理

tiandizhiguai

maven 打包工具 构建

自助取数、即席分析...瓴羊Quick BI助力企业数字化转型

对不起该用户已成仙‖

四步骤打造银行智能标签体系,助力银行精准营销

袋鼠云数栈

智能标签 数据画像

聚焦技术创新!旺链科技荣获“宝山区企业技术中心”认定

旺链科技

区块链 产业区块链 技术创新 12 月 PK 榜

英特尔着眼系统工艺协同优化理念,推进摩尔定律新浪潮

科技之家

聚焦人机交互智能应用领域,APISIX 在希沃网关的应用与实践

API7.ai 技术团队

api 网关 APISIX 用户案例

等保三级认证备案证明是哪个机构颁发?一般要多久?

行云管家

等保 等级保护 等保三级 等保备案

性能达1.5+倍!昇腾AI助力分子动力学模拟研究

华为云开发者联盟

人工智能 华为云 昇腾AI 12 月 PK 榜

MatrixOne 0.6.0 :首个云原生架构的HTAP数据库发布!

MatrixOrigin

分布式数据库 云原生数据库 国产数据库 MatrixOrigin MatrixOne

企业级大数据平台智能运维好帮手——星环科技多模数据平台监控软件Aquila Insight

星环科技

2022年12月中国数据库排行榜:OceanBase立足创新登榜首,华为腾讯排名上升树雄心

墨天轮

数据库 opengauss TiDB oceanbase 国产数据库

小游戏流量变现瓶颈,新增长点是超级App?

FinFish

小游戏 小程序游戏 微信小游戏 小游戏引擎 流量变现

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