写点什么

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

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

关注

评论

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

文科生的我用DeepSeek+AI程序员半小时开发了一个小程序

阿里巴巴云原生

阿里云 云原生 通义灵码 AI程序员 AI程序员体验官

深度解读「高盛」人形机器人最新研报:核心供应链企业和投资机会分析

机器人头条

科技 大模型 人形机器人 具身智能

ai智能体是什么?这6个AI智能体软件值得推荐!

职场工具箱

人工智能 在线白板 AIGC 效率软件 AI智能体

Vue3 性能优化十大技巧:打造高性能应用的终极指南

不在线第一只蜗牛

JavaScript vue.js 性能优化

Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法

OpenTiny社区

node.js 前端 OpenTiny

文科生的我用DeepSeek+AI程序员半小时开发了一个小程序

阿里云云效

阿里云 云原生 通义灵码 AI程序员 AI程序员体验官

区块链Dapp开发:质押挖矿的各模式开发

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

TiDB Chat2Query 深度解析:我们如何打造一款更高效、准确的智能 SQL 生成工具?

PingCAP

sql TiDB Chat2Query

财务规划的变革:如何推动数据科学的转型和分析

智达方通

企业管理 财务管理 财务管控 财务规划

智能工单有哪些核心功能,2025年智能工单系统发展趋势

云智慧AIOps社区

工单 工单管理 工单系统 智能工单

AI进化的终极目标:机器是否会拥有自由意志?

天津汇柏科技有限公司

人工智能 AI

国产远程软件用哪家?横向对比功能和流畅度,向日葵更优

编程猫

“NGINX邮件组历史”论坛上线了

通明湖

nginx 云原生 应用引擎

等保测评是什么?要提前准备什么?

黑龙江陆陆信息测评部

等保测评

Altair HyperWorks 2025 发布:再次升级AI驱动设计与仿真能力

Altair RapidMiner

机器学习 AI 仿真 CAE hyperworks

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