写点什么

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

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

关注

评论

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

企业im,为企业设计的私有化即时通讯工具

BeeWorks

即时通讯 IM 私有化部署

IPLC/CN2/BGP/CIA与普通网络线路差异对比

Ogcloud

BGP 企业组网 企业网络 IPLC 国际IPLC专线

大数据-05-Hadoop集群 集群WordCount 超详细 真正的分布式计算 上传HDFS MapReduce计算 YRAN查看任务 上传计算下载查看

武子康

大数据 hadoop mapreduce hive

从互联网女皇 AI 趋势报告,看融云大模型 API 服务

融云 RongCloud

IM即时通讯软件,构建企业局域网内安全协作

BeeWorks

即时通讯IM 私有化部署

《长安的荔枝》中隐藏的“算法思维”

博文视点Broadview

HarmonyOS应用闪屏问题性能优化三

李洋-蛟龙腾飞

网络安全自动化:最需要自动化的 12 个关键功能

天翼云开发者社区

安全

CAD面积如何快速测量?详细步骤来了

在路上

cad cad看图 CAD看图王

CAD图纸如何批量打印?详细教程来了

在路上

cad看图 cad软件 CAD看图王 CAD、

BOE(京东方)控股子公司武汉京东方回购少数股东股权 归母权益进一步提升

爱极客侠

和鲸科技亮相 2025 河南省人工智能大会,共绘“气象+AI”新图景

ModelWhale

人工智能 科学智能 河南省人工智能大会

vivo Pulsar万亿级消息处理实践(1)-数据发送原理解析和性能调优

vivo互联网技术

Java 大数据 后端 服务器 消息队列

通义灵码你问我答:看看 5 月上线了哪些新功能?

阿里云云效

什么是低代码?2025年低代码开发平台发展现状及标准化研究

优秀

低代码 低代码开发平台

软件测试 | 使用 Playwright 实现滑动验证码

测试人

软件测试

AI 技术在出版社信息化中的应用

北京木奇移动技术有限公司

软件外包公司 AI技术应用 出版社

华为开发者空间 - 自主编程之Cline×DeepSeek的智能融合探索

华为云开发者联盟

人工智能 华为云ModelArts 华为开发者空间

BeeWorks 协同办公能力:局域网内企业级协作的全场景重构

BeeWorks

即时通讯 IM 私有化部署

HarmonyOS应用闪屏问题性能优化二

李洋-蛟龙腾飞

融云上线大模型 API 服务,20 万 Token 免费送

融云 RongCloud

HarmonyOS应用闪屏问题性能优化一

李洋-蛟龙腾飞

融云大模型 API 服务上线,专注业务创新,底层交给融云

融云 RongCloud

从互联网女皇 AI 趋势报告,看大模型 API 服务

融云 RongCloud

AI API、AI 聊天助手,融云两大 AI 服务助力应用智能化转型

融云 RongCloud

TikTok直播没人看?被限流了怎么解决?

Ogcloud

直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 tiktok直播加速

还在用 Jmeter 做压测?试试 oha 吧!你会毫不犹豫的爱上它!

左诗右码

大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI

武子康

大数据 hadoop mapreduce hive

618特惠 | 全场75折、免费领500MB动态流量,更多福利叠加、零门槛领取!速来!

kookeey代理严选

静态代理 代理IP 跨境电商 动态代理IP 618特惠

为什么架构师都在偷偷练系统思维?

秃头小帅oi

出版社题库系统的开发

北京木奇移动技术有限公司

题库系统 软件外包公司 出版社

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