写点什么

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

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

关注

评论

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

英特尔唐炯:竞争推动PC行业良性发展,促使英特尔前行

最新动态

BIGO | Likee深度推荐模型的特征工程优化

InfoQ_3597a20b53cc

人工智能

来了,来了,你们要的Nginx教程来了

Java旅途

nginx

47 张图带你 MySQL 进阶!!!

苹果看辽宁体育

MySQL 后端

性能测试与优化 和 操作系统与文件系统

满山李子

极客大学架构师训练营

架构训练营第七周作业

张锐

百度人脸算法“飞速迭代”,多模态活体检测V3.1获银行卡检测中心增强级认证

百度大脑

人工智能 人脸识别 百度大脑

手把手教你写数独计算器(1)

一直AC一直爽

c++ 算法 数独

MinIO 参数解析与限制

耳东@Erdong

配置 Minio

秒懂云通信:选云通信到底哪家强?

阿里云Edge Plus

云通信 通信云

计算机网络基础(八)---网络层-路由概述

书旅

计算机网络 网络协议 计算机基础 AS

如何写出完美的接口:接口规范定义、接口管理工具推荐

xcbeyond

接口规范 接口管理工具 swagger Easy Mock

英特尔唐炯:把最好、最合适的产品带给最需要的消费者

最新动态

新手村:MySQL 学习经验、资源的分享

多选参数

MySQL MySQL 高可用 MySQL优化

【一起学系列】之命令模式:封装一个简单Jedis

Kerwin

设计模式 命令模式 Jedis

【小白学YOLO】YOLOv3网络结构细致解析

华为云开发者联盟

人工智能 网络 物体检测 华为云 网络层

技术​选型的艺术

YourBatman

技术选型 湖北

面试官拿System.out.println()考了我半个小时?我傻了

Java小咖秀

面试

性能测试和并发压力的关系

王锟

第七周学习总结

王锟

直播中那几秒延时到底来自哪?

阿里云Edge Plus

CDN 云直播 直播 直播带货

数据湖应用解析:Spark on Elasticsearch一致性问题

华为云开发者联盟

大数据 spark elasticsearch 数据湖 华为云

ARTS-WEEK7

一周思进

ARTS 打卡计划

JVM系列之:String,数组和集合类的内存占用大小

程序那些事

Java JVM GC JOL

架构师第七周作业

傻傻的帅

企业架构框架之FEA

冯文辉

企业架构

手写实现Promise

GKNick

WebRTC框架下的实时视频关键路径

fumingwang

第7周-作业1

seng man

http请求压测工具

潜默闻雨

MinIO 分布式集群搭建

耳东@Erdong

Minio cluster Minio 集群

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