写点什么

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

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

关注

评论

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

Media Encoder 2024 for mac(媒体转码器) v24.0.3中文版

展初云

Mac Media Encoder 媒体转码软件

从智能到“致用”,安第斯大模型与潘塔纳尔系统的一次会师

脑极体

大模型

现在的市场,我们怎么选择属于自己的一级币

币离海

zkSync 一级市场 Gensyn enemy

null 不好,我真的推荐你使用 Optional

越长大越悲伤

Java

Topaz Photo AI 2.1.2 for Mac(图像处理AI软件)

展初云

Mac 图像处理 Topaz Photo AI

GPT-4V新玩法登顶GitHub热榜,随手一画就能生成网页!web开发者:感受到了威胁

Openlab_cosmoplat

如何使用 NFTScan NFT API 在 Linea 网络上开发 Web3 应用

NFT Research

NFT\ NFTScan API 文档

Python连接es笔记一之连接与查询es

Hunter熊

Python elasticsearch Elasticsearch-dsl

Premiere Pro 2024 for mac(视频编辑工具) v24.0.3中文版

展初云

Mac PR 视频编辑软件 Premiere Pro 2024

当代企业的数字安全,能“脆皮”到什么程度?

脑极体

AI

探索亚马逊大语言模型:开启人工智能时代的语言创作新篇章

熬夜磕代码、

亚马逊

After Effects 2024 for Mac(视频特效制作工具) v24.0.3中文版

展初云

Mac AE After Effects 视频特效制作软件

Mac电脑图像编辑器 Photo Image Editor Pixelstyle激活版

胖墩儿不胖y

图像编辑 Mac软件 编辑图像

基于ChatGPT自动化测试项目生成方案

lklmyy

测试框架 AIGC

SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY 详解

小万哥

MySQL 数据库 sql 程序员 后端

蓝牙耳机仓设计的单芯片解决方案

芯动大师

Ethereum WebSocket接口实践

FunTester

2023广告节:原生场景结合科技美学,鲸鸿动能赋能企业长效增长

最新动态

观测云助力跨境电商大幅提高加载性能

Yestodorrow

可观测性 跨境电商 性能提升 可观测性用观测云

业务流程图用什么软件画?这10款流程图软件,效率快到飞起!

彭宏豪95

流程图 画图软件 在线白板 流程图绘制工具 绘图软件

亚马逊云EC2的存储

孤虹

Amazon EC2 亚马逊云

11月18日,华为负一屏5万张“大额神券”等你抢!当天领取当天用

最新动态

bitsCrunch:如何通过 AI 技术重塑 NFT 市场?

股市老人

Go、容器以及Linux调度器

俞凡

golang

「Flink+Hologres 搭建实时数仓」训练营重磅开启

Apache Flink

大数据 flink 实时计算

PDF Expert for mac(pdf编辑工具) v3.7.1中文激活版

展初云

Mac Mac软件 pdf编辑工具

认知,是成长最大的桎梏

老张

深度思考 个人成长 认知

不要以模块化为理由去实施微服务

neverwinter

架构 微服务 模块化

【云服务器选型指南:五大关键】

云服务器 安全性 云服务器ECS

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