HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

解析 AI 时代广告素材格局:AppsFlyer 综合报告揭示行业关键数据洞察

财见

GRequests: 让 HTTP 服务人类

江湖十年

golang 后端 HTTP http client #go

开始报名!龙蜥社区系统安全 Meetup 硬核议程发布

OpenAnolis小助手

操作系统 系统安全 龙蜥社区 eBPF 技术

Python优化、异常处理与性能提升技巧

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言

蓝易云 - 在C/C++中使用vcpkg

百度搜索:蓝易云

c++ 运维 服务器 云服务器 高防服务器

从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践

华为云开发者联盟

数据库 后端 时序数据库 华为云 华为云开发者联盟

昆仑万维开源2千亿稀疏大模型天工MoE,全球首创能用4090推理

新消费日报

蓝易云 - jenkins教程:sshPublisher示例(Publish over SSH插件)

百度搜索:蓝易云

运维 SSH 服务器 jenkins 免备案服务器

Apache IoTDB 分布式架构三部曲(二)分片与负载均衡

Apache IoTDB

多云世界中的 API 治理

幂简集成

API 多云 API治理

F5G城市光网,助力“一网通城”筑基数字中国

脑极体

AI 网络

Amazon Q Developer 实战:从新代码生成到遗留代码优化(下)

亚马逊云科技 (Amazon Web Services)

人工智能 生成式人工智能

万界星空科技数字孪生智慧工厂

万界星空科技

数字孪生 智慧工厂 智能制造 mes 万界星空科技

展示柜透明显示屏的特点简析

Dylan

创新 视频 商品 LED display LED显示屏

度安讲 | 第二期「安全左移·业务护航」技术沙龙成功举办

百度安全

蓝易云 - maven教程:mvn package -T 2C命令解释

百度搜索:蓝易云

Java maven Linux 运维 云服务器

【PMP必考点】2024年PMP敏捷知识必考点

敏捷开发

项目管理 产品经理 pmp 项目经理 PMP考试

李尔将收购西班牙自动化和智能公司WIP Industrial Automation

财见

GitHub上新!14个Python项目详细教程(附完整代码)

我再BUG界嘎嘎乱杀

Python 后端 入门 开发语言 零基础

蓝易云 - nginx教程:alias和root的区别

百度搜索:蓝易云

nginx Linux 云服务器 root alias

告别内存OOM,解决MySQL内存增长问题

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

人员身份级的数据中心机房作业随工

鲸品堂

机房 数据中心 机房管理 企业号 6 月 PK 榜

数字化时代,API网关为何如此重要?

芯盾时代

网络安全 网关 API网关

近期京东开发者最受欢迎的 10 篇文章,内附大量热门岗位招聘

京东科技开发者

构建Python构建自动化测试框架(原理与实践)

我再BUG界嘎嘎乱杀

Python 软件测试 自动化测试

Unix套接字进程通信初探【Java版本】

FunTester

深入研究区块链数字版权交易

dappweb

区块链数字版权交易

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