c# 针对internal的类 如何写测试类

在C#中,internal 关键字意味着一个类型或成员只能在定义它的程序集中访问。这通常用于封装那些不应该被外部程序集直接访问的实现细节。但是,在编写单元测试时,我们可能希望测试这些internal类和方法。有几种方法可以实现这一点:

  1. 使用InternalsVisibleTo属性
    你可以使用 InternalsVisibleTo 属性来允许特定的测试程序集访问你的程序集中的 internal 类型和成员。

    在你的主程序集(AssemblyInfo.cs 或相应的.cs文件)中添加以下属性:

    [assembly: InternalsVisibleTo("YourTestProjectName")]
    // 或者,如果你需要包含公钥,可以这样做:
    [assembly: InternalsVisibleTo("YourTestProjectName, PublicKey=你的公钥字符串")]
    

    这样,你的测试项目就可以访问主程序集中的 internal 类型和成员了。

  2. 将类更改为public
    如果你只是临时为了测试而需要这样做,并且不打算将类保持为 public,你可以将类更改为 public 来编写测试,然后再改回 internal。但这种方法不是推荐的做法,因为它可能会引入不必要的可见性。

  3. 使用反射
    你可以使用反射来访问 internal 方法和字段,但这通常比使用 InternalsVisibleTo 属性更复杂,且更容易出错。

  4. 将需要测试的功能移动到public接口中
    如果可能的话,考虑重新设计你的代码,将需要测试的功能暴露为public接口的一部分。这有助于使你的代码更加可测试和可维护。

  5. 使用测试框架的特定功能
    某些测试框架(如xUnit.net)提供了特性(attributes)或配置选项,允许你更容易地访问 internal 成员。不过,这通常是通过使用 InternalsVisibleTo 属性来实现的。

通常,InternalsVisibleTo 属性是测试 internal 成员的最简单和最常用的方法。只需确保你的测试项目名与 InternalsVisibleTo 属性中指定的名称匹配,并且(如果需要)包含正确的公钥(如果你使用了强名称签名)。

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

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

相关文章

用于视频识别的快慢网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读:用于视频识别的快慢网络1、文献摘要2、提出方法2.1、SlowFast模型2.2、SlowFast 提出思想 3、相关方法3.1、时空间卷积3.2、基于光…

golang中变量交换的2种方式

变量的交换在我们对数据进行排序时是必须要用到的技术, 今天就给大家介绍2种go语言中交换变量的方式。 1. 使用传统方式定义一个中间变量来进行变量的交换 // 文件名 demo1.go package demo01import "fmt"func ExampleDemo02() {//常规方式进行变量交换…

词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案?

词令蚂蚁庄园今日答案如何在微信小程序查看蚂蚁庄园今天问题的正确答案? 1、打开微信,点击搜索框; 2、打开搜索页面,选择小程序搜索; 3、在搜索框,输入词令搜索点击进入词令微信小程序; 4、打开…

视频编辑软件pitivi基本功之创建标题片段

视频编辑软件pitivi基本功之创建标题片段 台式机的系统是openSUSE-Leap-15.5-DVD-x86_64 一、素材来源 《视频编辑软件pitivi基本功之使用SSR录制电脑屏幕》 https://blog.csdn.net/weixin_42145772/article/details/138597608?spm1001.2014.3001.5502 根据上面文章的方法得…

三层交换机与路由器连通上网实验

三层交换机是一种网络交换机,可以实现基于IP地址的高效数据转发和路由功能,通常用于大型企业、数据中心和校园网络等场景。此外,三层交换机还支持多种路由协议(如OSPF、BGP等),以实现更为复杂的网络拓扑结构…

CCF CSP 认证考试历年真题满分题解(所有前四题)

CCF CSP 认证考试历年真题满分题解(所有前四题) 前言 原本刷题的动机仅仅是为研究生复试的机试环节做准备,我通过刷csp的真题来锻炼自己,因为上次的机试题目全部是csp真题,最后也是顺利上岸。空闲之际,我…

工业机器人应用实践之玻璃涂胶(篇三)

工业机器人 接上篇文章,浅谈一下实践应用,具体以玻璃涂胶为例: 了解工业机器人在玻璃涂胶领域的应用 认识工具坐标系的标定方法 掌握计时指令的应用 掌握人机交互指令的应用 掌握等待类指令用法(WaitDI、WaitUnitl 等&#xff0…

练习题(2024/5/11)

1逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算对象)都可以是一个整数或…

【初阶数据结构】单链表基础OJ题讲解

前言 📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL。 📚本文收录与初阶数据结构系列,本专栏主要是针对时间、空间复杂度,顺序表和链表、栈和队列、二叉树以及各类排序算法,持…

创新指南 |风险管理:企业如何应对颠覆性创新带来的挑战

在当今充满变数的商业时代,颠覆性创新是企业突破传统、引领市场的关键。然而,真正的创新之旅并不平坦,充满了挑战和不确定性。文章将快速引导读者了解颠覆性创新的定义、挑战、以及如何通过设计思维、市场洞察、利益相关者沟通和文化变革等关…

一文带你看懂Vue.js

Vue.js(发音为 /vjuː/,类似 view)是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,可以高效地开发用户界面。无论是简单还是复杂的界面&#…

障碍物识别软件的优缺点

在这个科技与人文关怀交织的时代,一款基于激光雷达技术的障碍物识别软件正悄然为视障人士的日常生活带来一场革命性的改变。这一款叫做“蝙蝠避障”的软件利用先进科技的力量,为盲人出行铺设了一条更加安全、独立的道路。今天,让我们从资深记…

nc生成临时凭证配置

nc生成临时凭证配置 要实现的功能: 审批时生成临时凭证弃审时删除临时凭证 前台配置 后台配置 BillReflectorServiceImpl.java package nc.pubimpl.jych.qtsq.voucher;import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; impo…

如何批量将十六进制数据转成bin文件

最近在做新项目遇到一个问题,我们要通过上位机把一堆数据通过串口发送给下位机存储,而上位机需要Bin文件。 解决办法: 1)创建一个记事本文件,然后将其后缀修改成.bin 2)然后打开notepad,新建一个文件,随便写下数据 我…

搭建私有仓库Nexus的流程以及npm包的开发和发布

搭建私有仓库 Nexus 的流程(Ubuntu)以及 npm 包的开发和发布 本文档是关于在 Ubuntu 上面搭建 Nexus,以及制作 npm 包并发布到 Nexus 的流程说明。 关于 Ubuntu Ubuntu 是一个基于 Linux 的操作系统,通常会用在服务器或者嵌入式…

哈希表第4/9题--检验快乐数

题目:leetcode202 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果…

Django简介

Django 1.安装Django pip install djangopython的包的分布 \python- python.exe- Scripts- pip.exe- django-admin.exe [工具,创建django项目]- Lib- 内置模块- site-packages [安装的包]- pymysql- flask- django [框架的源码]2.创建项目 Django项目会有…

java spring 10 Bean的销毁过程 上 在docreatebean中登记要销毁的bean

1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…

Linux函数

目录 一、脚本函数 1.1 创建函数 1.2 使用函数 二、函数返回值 2.1 默认的退出状态码 2.2 使用return命令 2.3 使用函数输出 三、在函数中使用变量 3.1 向函数传达参数 3.2 在函数中处理变量 四、数组变量和函数 4.1 向函数中传递数组 4.2 从函数中返回数组 五、函数…

【1】STM32·FreeRTOS·新建工程模板【一步到位】

目录 一、获取FreeRTOS源码 二、FreeRTOS源码简介 2.1、FreeRTOS源码文件内容 2.2、FreeRTOS内核 2.3、Source文件夹 2.4、portable文件夹 三、FreeRTOS手把手移植 3.1、FreeRTOS移植准备 3.2、FreeRTOS移植步骤 3.2.1、将 FreeRTOS 源码添加至基础工程、头文件路径等…