写点什么

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

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

关注

评论

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

http 协议 harbor 镜像仓库部署

忙着长大#

10:子查询-MySQL

Yeats_Liao

数据库 后端 10月月更

前端开发-初始HTML

木偶

html 前端 10月月更

JavaScript基础部分能力提升以及解答方案

木偶

JavaScript 前端 10月月更

虚拟化资源监控

阿泽🧸

10月月更 虚拟化监控

流式计算引擎对比

穿过生命散发芬芳

10月月更 流式计算

SAP | 来了解一下事件吧

暮春零贰

SAP 事件 10月月更

第九期 - 模块四

wuli洋

Java | Collection集合

陌上

Java 编程 10月月更

半小时看懂互联网运营,学会做局与破局

蔡农曰

运营 互联网+ 互联网行业 互联网运营

极客时间运维进阶训练营第二周作业

chenmin

基于 docker 实现对容器的 CPU 和内存的资源限制

忙着长大#

Docker 镜像

Java | Map集合

陌上

Java 编程 10月月更

9:多表查询-MySQL

Yeats_Liao

数据库 后端 10月月更

极客时间运维进阶训练营第二周作业

Starry

Java | Collection集合的子类

陌上

Java 编程 10月月更

2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。 你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k , 其中第 i 次扔得到的数字是 rolls[i]

福大大架构师每日一题

算法 rust 福大大

程”风破浪的开发者|python学习之注释

魏铁锤

学习方法 “程”风破浪的开发者

Nest.js初步学习

木偶

Express nestjs 10月月更

QECon上海站|蚂蚁测试用例智能生成技术架构与实践

TRaaS

嵌入式 Linux 入门(九、Linux 下的磁盘管理)

矜辰所致

Linux 10月月更 磁盘管理

11:高级部分-MySQL

Yeats_Liao

数据库 后端 10月月更

week3 - 作业

in9

一道SQL注入的简单题_wp

w010w

sql 网络安全 SQL注入 10月月更

【点滴】生活模型

无人之路

个人成长 日志 模型思维

远程代码执行漏洞

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

AI读懂中国,文心方可雕龙

脑极体

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