AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

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

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

关注

评论

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

基于大模型的低代码平台架构

百度开发者中心

人工智能 低代码 大模型

Mac好用的多窗格文件管理器QSpace Pro v4.0.4中文版

南屿

UML建模工具Astah Professional,实现逼真模型,让设计更加生动!

南屿

在 Windows 平台下安装与配置 MySQL 5.7.36

小魏写代码

【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手

阿Q说代码

知识库 千帆大模型平台 AppBuilder 小助手

鼠标自动点击工具 RapidClick for Mac激活最新版

南屿

Mac软件 RapidClick破解版

如何查看电脑性能跑分?Geekbench极客系统跑分工具

南屿

海外云手机对于亚马逊卖家的作用

Ogcloud

云手机 海外云手机 云手机海外版

什么是DDOS流量攻击,DDoS防护安全方案

德迅云安全杨德俊

新来的一个同事,把SpringBoot参数校验玩的那叫一个优雅

快乐非自愿限量之名

Java 前端 springboot

聚道云软件连接器:打通金蝶云星空与招商银行CBS,提升企业财务和银行业务效率

聚道云软件连接器

案例分享

如何将照片组合在一起?图片照片拼接合成软件合集

南屿

照片编辑 图片拼接 照片合成

Excel复杂表头按组按行复制

alexgaoyh

Java POI 合并单元格 复杂表头 模板生成

AE脚本-一键快速输出GIF动图格式插件 GifGun v2.0.15激活版

南屿

一次编写,多次利用:提高 API 构建效率的技巧

Apifox

前端 后端 开发工具 Apifox API

NFTScan 与 OneID 达成合作伙伴,支持多类型 DID 搜索!

NFT Research

NFT NFTScan

软件测试学习笔记丨JMeter_实现分组并发

测试人

软件测试

Bartender 5 for mac自定义隐藏及显示菜单栏

南屿

预见2024:开发体育直播平台有这4大新趋势

软件开发-梦幻运营部

鸿蒙5.0发布时间已定!移动开发加速器往何处寻找?

Geek_2305a8

iOS App审核状态和审核时间管理指南

2024谷歌SEO入门指南

九凌网络

Total Video Converter Pro超级转霸 Mac视频转换软件 v5.1.0下载

南屿

谁说后端不能画出美丽的动图?让我来给大家拜个年!

不在线第一只蜗牛

Java JavaScript 后端 动图

小程序技术实践:如何快速开发适配鸿蒙的App

Geek_2305a8

区块链游戏解说:什么是 SecondLive

Footprint Analytics

区块链 加密货币 代币 NFT

一个菜鸡前端的3年总结-「2023」

Immerse

大模型开发:从数据挖掘到智能应用

百度开发者中心

人工智能 大数据 大模型

云API错误码的设计规则

EquatorCoco

Python 数据库 API

VJ创作表演:Resolume Arena 6 for Mac中文版 含esolume arena 破解补丁

南屿

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