写点什么

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

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

关注

评论

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

0.9uA 低功耗低压差稳压器

芯动大师

docker日志设置大小、build cache清理及业务日志清理

智慧源点

Docker

应对 DevOps 中的技术债务:创新与稳定性的微妙平衡

禅道项目管理

DevOps 自动化测试 技术债务 禅道项目管理

大模型Chatbots评估新视角:结合定性与程序方法的实践经验

Baihai IDP

程序员 AI LLM 白海科技 Chatbots

XPET宠物游戏系统开发

l8l259l3365

WorkPlus安全专属的即时通讯解决方案,助力企业高效沟通协作

BeeWorks

三分钟部署一个免费妙鸭相机!

鹤涵

人工智能 LoRa Stable Diffustion

布隆过滤器(Space/Time Trade-offsin Hash Coding with Allowable Errors)

乐只

布隆过滤器 计算机科学与技术 论文解读

C 语言函数完全指南:创建、调用、参数传递、返回值解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

IM即时通讯如何引领数字化时代的沟通革命?

BeeWorks

WorkPlus支持平台级定制,助理企业自主掌控业务和生态

BeeWorks

WorkPlus Meet打造高质量的视频会议体验,助力实时远程协作

BeeWorks

WorkPlus AI助理为企业提供智能客服的机器人解决方案

BeeWorks

WorkPlus完备的企业级功能堆栈,打造高效的企业移动平台

BeeWorks

聚道云软件连接器助力某新能源行业公司实现付款流程自动化

聚道云软件连接器

案例分享

学员 Luke 的复盘 - 大纲

Luke

DevSecOps|极狐GitLab IaC 安全扫描,保障云原生安全

极狐GitLab

拥抱梦想夏令营:2024年暑假招生计划发布,助力青少年成长

科技热闻

“云+冷链”新场景,华为云助力前海粤十“物畅其流”

华为云开发者联盟

后端 物联网 华为云 华为云开发者联盟

打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台

码界西柚

RocketMQ 云原生 消息队列 2024年第五篇文章

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