AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

被面试官问的Android问题难倒了,深度集成!

欢喜学安卓

android 程序员 面试 移动开发

华为助力高校释放能量,加速中国从开源使用大国向贡献大国转变

科技热闻

技术解码 | GB28181协议简介及实践

腾讯云音视频

腾讯云 ffmpeg 流媒体 视频监控系统

DeFi智能合约DAPP开发|DeFi项目源码

Geek_23f0c3

DeFi去中心化系统开发 DAPP智能合约交易系统开发

如何借用第三方APM工具, 为移动应用保驾护航

APM

一条SQL语句执行得很慢的原因盘点

北游学Java

Java MySQL

MySQL高频面试题的灵魂拷问

java小李

MySQL

编辑器看看

strive

编辑器

大学四年Java学习路线规划,所有私藏资料我都贡献出来了

java小李

spring Java web

深度融合,云管理平台助推政府实现“最多跑一次”改革

BoCloud博云

云计算 云管理平台 云管理

iOS底层面试题(下篇)

程序员 面试 ios开发

幸福的人在当下就活出了幸福的样子|靠谱点评

无量靠谱

《MyCat数据库的基础配置及使用》

java小李

java 14 mycat

解决方案| 全民抗“灾”- 实时音视频在应急指挥场景的应用

anyRTC开发者

音视频 WebRTC 指挥调度

最新流行的6大优秀DevOps工具

java小李

java 14 puppeteer

这款开源软件绝了!1分钟即可打造了一个”黑客范“终端~

编程菌

Java 编程 程序员 项目 计算机

四面字节跳动,终于拿下1-2级offer :Redis+分布式+微服务+算法+网络

Java 程序员 架构 面试 计算机

速来围观!大佬把Java基础核心知识整理成了PDF版

java小李

Java开发手册 Java 开发

请谈下Android消息机制,成功拿下大厂offer

欢喜学安卓

android 程序员 面试 移动开发

向大佬学习!「mybatis查询匹配机制」,手动点赞

java小李

java 14 Mybati

FBI 警告称,网络犯罪分子可能以 2021 年东京奥运会为目标!

郑州埃文科技

被转载10W次的:Java小白系统资料和职业规划路线

java小李

java基础

《分享几道高频 Redis 高频面试题,面试不用愁》

java小李

Redis Stream

架构训练营模块3课后作业-学生管理系统详设文档

喻高咏        

详解TCP协议与UDP协议的区别

Linux服务器开发

网络协议 Linux服务器开发 Linux后台开发 TCP协议 UDP协议

Vue进阶(九十四):自定义组件

No Silver Bullet

Vue 自定义组件 7月日更

携生态伙伴展示AI计算盒参考设计最新成果 英特尔点亮智能边缘广阔机遇

E科讯

GitHub标星139K的:“嵌入式Linux系统开发教程”

白亦杨

基于 Java Spring Security 的关注微信公众号即登录的设计与实现ya

哈德韦

spring security 微信公众号 Apache Pulsar SSO

他是因为什么,能在半年内从菜鸟学生成为大厂收割机?

Java架构师迁哥

数字化成潮流,运维为啥也热了?

ToB行业头条

科技互联网

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