似乎可以用源代码生成器生成用于单元测试的代理方法

news/2024/11/20 18:25:23/文章来源:https://www.cnblogs.com/HiroMuraki/p/18558978

对于类中的非public方法,如果要进行单元测试就比较麻烦,因为单元测试项目里通常不能正常访问非public方法,此时解决方法一般有两个:

一是把方法声明为internal,然后将单元测试项目设置为友元程序集。
缺点是要改访问修饰符,对于我这种强迫症很不友好(

二是用反射访问。
缺点是接口要是改了反射代码得手动改,就很麻烦(而且对性能测试不够友好)。

还有一种方法是声明一个与接口相似的public方法作为“代理”,以此间接调用要测试的非public方法(比如声明一个public的Meow_Proxy调用Meow,外部要测试Meow就通过调用Meow_Proxy来测试)。
但同时其缺点综合了法一和法二,首先一个一个添加/修改代理方法很麻烦,其次额外的奇怪代码对强迫症也不友好。

突然想到可以用源代码生成器来完成这一工作,同时克服上述的两个缺点 。

这个源代码生成器的作用就是为每个打了GenerateUnitTestProxy特性的方法都生成一份代理方法。

首先最明显的,由于代码是自动生成,所以有效规避了手动修改这些操作。

接下来,再为GenerateUnitTestProxyAttribute特性添加Conditional("UNIT_TEST")特性,并在源代码生成器中添加“如果没有定义UNIT_TEST符号就跳过生成”的逻辑,这样在没有定义UNIT_TEST的情况下就不会对当前代码的编译结果有任何影响。

完美(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837454.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时多模态 AI 的 N 种新可能丨实时互动和大模型专场@RTE2024回顾

在本届 RTE2024 大会上,来自产业界和学术界的多位专家深入探讨了实时互动和大模型技术的最新进展及其潜在应用。西湖心辰联合创始人俞佳、声网 AI 算法工程师乔齐、MiniMax 资深音频算法专家张博闻、商汤科技数字文娱解决方案负责人焦文奎以及面壁智能算法 VP 翟忠武等分享了他…

vscode主题美化

vscode 主题美化 主题使用Tokyo Night由于我在用rust的时候发现其对一些变量的颜色不太好看,所以自己又在设置中改了一点"editor.tokenColorCustomizations": {...."[Tokyo Night]": { // or "[Tokyo Night Storm]""textMateRules": […

2024.11.20总结

1本文于 github 博客同步更新。 A: 一个数可以被操作当且仅存在一列的顶部元素为它且存在一列的底部元素为它,初始扫一遍,将合法的元素以顶部所在列为关键字扔到小根堆里,每次找到最小的元素添加,然后检查将新露出来的元素是否存在匹配,若结束时未填完即为无解。 B: 要么…

ABAP 日期计算

RP_CALC_DATE_IN_INTERVAL 日期函数2 FIMA_DATE_CREATE 有问题 在2月份计算有问题 慎用 计算两个日期月份 FIMA_DAYS_AND_MONTHS_AND_YEARS

群晖NAS维修数据恢复

一台群晖NAS,开机状态灯是黄灯,DISC4也是亮黄灯,机器一直在报警。 群辉型号DS415+,是一种典型的硬盘损坏的情况,这是一台四盘位的一个群辉NAS,第一时间把每个硬盘取下来编个编号,WD的红盘也就是nasVR专用硬盘,型号是WD401F2X的,生产日期有三块是2015年,有一块是比较新…

实景三维技术在基层社会治理中的数智化应用

在推进国家治理体系和治理能力现代化的进程中,基层社会治理的数字化转型尤为关键。实景三维技术,以其直观、精准的空间信息表达能力,正在成为基层社会治理的有力工具。本文将探讨实景三维技术如何在“地、房、人、用、管”五个维度赋能基层社会治理。一、实景三维技术简介实…

Nginx服务器配置---反向代理服务时proxy_pass的转发规则

nginx是由俄罗斯开发的一款http web服务器,我们经常用这款服务器做负载均衡和反向代理。今天我们就来聊聊Nginx作为反向代理时,如何进行路由配置。假设你已经部署好Nginx了,我们进入Nginx安装目录,进入nginx.conf文件。找到http节点下的server节点,值是一个json。在json中…

less 全局变量使用 引用

参考链接: https://blog.csdn.net/qq_42493241/article/details/120021001 照搬成功 (以防链接失效截图)

Ablations

消融实验(ablation study)是什么? 太长不看版: 说白了就是设立对照组/控制变量法的意思,通过去除/增加某个模块的作用,来证明该模块的必要性,如果消融实验后得到性能结果大幅变化,说明该模块起到了作用。—————————————————————————— 严谨版: …

低代码无代码开发工具:TOP10排名

随着企业数字化转型步伐的加快,无代码及低代码开发工具(LCNC)已跃升为构建应用的首选方案。这些工具凭借简化开发流程、降低技术壁垒的优势,赋能企业迅速构建并部署应用,以灵活应对市场的瞬息万变。为何需要低无代码? 在快速迭代的商业环境中,传统的代码开发模式往…

Debian12关闭休眠模式

场景描述: 日常服务器部署中,系统环境如果是Debian12操作系统,那么安装完操作系统后,会默认开启系统自动休眠模式, 需要关闭系统的自动休眠,否则网络状态也会休眠,导致远程连接服务器的时候,没有响应! 临时解决方式: 如果目标服务器在机房或者在旁边,可以移动下该服…

IDM冻结试用期

本文并非原创,详细内容在GitHub上 https://github.com/lstprjct/IDM-Activation-Script/blob/main/README.md https://github.com/Mercury-Z/IDM-Activation-Script-Chinese 我讲讲我的使用过程,现在CSDN上阅读量比较多的帖子都是IDM破解版安装包,但就怕安装包有夹带,而且我…