写点什么

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

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

关注

评论

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

String源码解析-String的使用注意2

zarmnosaj

5月月更

谁说 Zadig 只能复制环境?数百微服务一套环境实现高效协作

Zadig

DevOps 云原生 CI/CD 软件交付

动辄“耗资过亿”的表格工具,究竟难在哪儿?

葡萄城技术团队

英特尔以四大超级技术力量,助力数字未来,发布多项进展

科技新消息

如何清除 WordPress 中的缓存

海拥(haiyong.site)

WordPress 5月月更

基于 Agora SDK 实现 Windows 端的一对一视频通话(基于3.6.2版本)

声网

人工智能 音视频 sdk

“四大高手”为你的 Vue 应用程序保驾护航

葡萄城技术团队

FinClip+微幕小程序,助力企业全端公私域流量互通

Speedoooo

小程序 WordPress 移动开发 小程序容器

英特尔公布数据中心和人工智能领域重大进展,全方位展示强劲领导力

科技新消息

实现同比、环比计算的N种姿势

葡萄城技术团队

数据分析 BI数据分析 同比 环比

如何开发 LAXCUS 分布式应用软件(四):编写边缘端软件

LAXCUS分布式操作系统

并行计算 端边云协同架构 分布式操作系统 分布式应用软件

Spring Authorization Server 实现授权中心

Zhang

Java OAuth 2.1 Spring Security OAuth

揭秘英特尔未来IPU路线图,开启数据中心“进化之旅”

科技新消息

直播预告 | PolarDB-X 动手实践系列——PolarDB-X Replica原理和使用

阿里云数据库开源

数据库 阿里云 开源 PolarDB-X

4月月更开奖啦!中奖者速来领取!

InfoQ写作社区官方

热门活动

玩了一场剧本杀,同车队友“不是人”

脑极体

维护版式文档技术生态 国际PDF协会向福昕软件发来感谢信

联营汇聚

深入剖析 split locks,i++ 可能导致的灾难

火山引擎开发者社区

数据标准在网易的实践

网易数帆

大数据 数据仓库 数据治理 元数据 数据标准

echarts饼图指示器文字颜色设置不同

空城机

eCharts 5月月更

“软件定义汽车”的数字化之变,华为云低代码平台带来了什么?

脑极体

快速上手 Pythond 采集器的最佳实践

观测云

运维 可观测性 可观测

GPU分类和应用现状分析

Finovy Cloud

人工智能 云计算 gpu GPU服务器

在字节跳动,一个更好的企业级SparkSQL Server这么做

字节跳动数据平台

我国类脑计算处于什么水平?人工智能下神经科学启发的类脑计算。

GPU算力

人工智能 液冷服务器 类脑计算 神经科学

钉钉 Flutter 跨四端方案设计与技术实践 | Dutter

阿里巴巴终端技术

flutter 移动端 跨端框架 桌面端

硬件为矛 软件为盾 英特尔分享数据中心GPU的攻守之道

科技新消息

蝉联第一!金蝶夺取Gartner中国高生产力aPaaS市场冠军!

金蝶云·苍穹

Cilium 多集群 ClusterMesh 介绍

Se7en

云图说|华为云帮助中心最佳实践:源自项目实战的上云指导

华为云开发者联盟

最佳实践 华为云 云图说 帮助中心 业务上云

【刷题第五天】1. 两数之和

白日梦

5月月更

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