在.NET单元测试中使用嵌入式资源
目录
介绍
背景
使用代码
- 下载源22.4 KB
介绍
有时,单元测试的逻辑要求使用嵌入到库中的资源。最有可能的是,该文件保留了黑盒的初始数据,并已通过单元测试进行了测试。这篇文章将展示如何使用这类资源。
背景
假设我们需要编写单元测试,以验证黑盒是否为空文件引发异常。在Visual Studio中创建测试项目后,我们立即将空的test.dat文件添加到Resources文件夹中。
该资源的“Build Action”属性必须设置为“Embedded Resource”,这意味着该文件已嵌入可执行文件中。
使用代码
我们可以将资源读取为流,而只有一个方法扩展GetEmbeddedResourceStream将参数传递为资源“Resources.test.dat”的路径。单元测试期望BlackBox类在读取获取的资源时在Operation方法中引发异常。
namespace EmbeddedResource_demo
{public class BlackBox{public void Operation(Stream stream){if (stream.Length == 0)throw new ArgumentException("Stream is empty");// Do some logic}}[TestClass]public class UnitTest1{[TestMethod][ExpectedException(typeof(ArgumentException), "Stream is empty")]public void TestFileIsEmpty(){using (var inputStream = Assembly.GetExecutingAssembly().GetEmbeddedResourceStream("Resources.test.dat")){var blackbox = new BlackBox();blackbox.Operation(inputStream);}}}
}
添加类AssemblyExtensions以定义新方法,该方法返回嵌入式资源文件的数据流。
public static Stream GetEmbeddedResourceStream(this Assembly assembly, string relativeResourcePath){if (string.IsNullOrEmpty(relativeResourcePath))throw new ArgumentNullException("relativeResourcePath");var resourcePath = String.Format("{0}.{1}",Regex.Replace(assembly.ManifestModule.Name, @"\.(exe|dll)$", string.Empty, RegexOptions.IgnoreCase), relativeResourcePath);var stream = assembly.GetManifestResourceStream(resourcePath);if (stream == null)throw new ArgumentException(String.Format("The specified embedded resource \"{0}\" is not found.", relativeResourcePath));return stream;}
参数assembly表示包含资源的程序集。参数relativeResourcePath表示嵌入式资源文件的相对路径。
在.NET单元测试中使用嵌入式资源相关推荐
- 单元测试中 Right-BICEP 和 CORRECT
My Blog:http://www.outflush.com/ 在单元测试中,有6个总结出的值得测试的方面,这6个方面统称为 Right-BICEP,通过这6个方面的指导,可以较完全的测试出代码中的 ...
- IBM技术论坛:使用 Cobertura 和反射机制提高单元测试中的代码覆盖率
引言 单元测试是软件开发过程中重要的质量保证环节.单元测试可以减少代码中潜在的错误,使缺陷更早地被发现,从而降低了软件的维护成本.软件代码的质量由单元测试来保证,而单元测试自身的质量与效率问题也不容忽 ...
- 【全面解析Mock】Mock在单元测试中扮演一个什么角色?
目录 一.Mock在单元测试中扮演一个什么角色 二.测试准备 三.使用Mock的理由 四.使用Python Mock 五.MagicMock类 六.mock.create_autospce 七.moc ...
- Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解
在Junit4中还有的测试注解有: @BeforeClass ,@Before,@Test,@After,@AfterClass 1.其中:@BeforeClass,@AfterClass是Juni ...
- linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源
三.[GPIO驱动框架>向omap_hwmod中添加GPIO资源] ***将GPIO硬件信息添加到注册到omap_hwmod_list列表中 Arch/arm/plat-omap/include ...
- 9 单元测试中不得不知的概念
单元测试中不得不知的概念 前言 软件单元及单元测试 驱动函数和桩函数 总结 前言 做单元测试,如果不弄清楚什么是单元,那十八般武器也无的放矢了.可能在单元测试中听到最多的就是驱动函数.桩函数和逻辑覆盖 ...
- Spring-Boot:写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的图标资源?
Spring-Boot:Spring-Boot写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的 ...
- oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死 解决方法
oracle中"ORA-00060: 等待资源时检测到死锁" 或存储过程编译卡死 解决方法 参考文章: (1)oracle中"ORA-00060: 等待资源时检测到死锁& ...
- java中如何就绝对定位,Java中如何定位资源
Java中如何定位资源 本文来自:http://blog.csdn.net/ruyanhai/archive/2007/11/07/1871663.aspx ◆ 一般情况下,我们都使用相对路径来获取资 ...
最新文章
- 不知道这些,简历上千万不要说你会 Redis 持久化。。。
- Spark2.X环境准备、编译部署及运行
- Emoji表情符号兼容方案(适用ios,android,wp等平台)
- linux中的目录结构---Linux学习笔记
- cx oracle 配置,cx_Oracle的配置啊。。终于搞出来了
- 进击的二维码 | ArcBlock 课堂预告
- resiprocate 之repro注册
- ASP.NET2.0 Person Web Site:将图片以二进制的从数据库读取
- 如何应对互联网和物联网化带来的工业安全新风险?
- 非华为电脑安装华为电脑管家11.1.1.101
- python的基本函数图像_python绘制基本初等函数图像
- 如何快速从入门到精通linux
- 高薪职业,英年早秃?关于程序员,多的是你不知道的事……
- Redis生成自增流水号,每日清零
- 积分营销系统的优势知多少
- 模型实践 | AI驱动的全球精准气象预报
- FrameMaker 格式的本地化流程
- 动画 + 大白话讲清楚React渲染原理
- CSS学习笔记一 ——详细附图、入门必看
- Python计算温度植被干旱指数(TVDI)
热门文章
- wxpython textctrl_如何从wxpython中的textctrl接受值
- 广西专业技术人员职称个人版_「职称评审」机械工程专业技术人员如何写职称论文?...
- python 判断线程状态_Python 线程和进程
- mysql+存储过程+模式,Mysql(7)---存储过程
- echarts grid的样式位置_vue使用Echarts vue使用Echarts滚动条
- QT创建文件夹(QDir方式)
- Mpi与Cuda混合编程(Makefile)
- jquery生成一个li_如何使用jQuery从字符串数组生成UL Li列表?
- 小程序突然报module is not defined_菲尔德睡前英语小故事 | 狼来了
- 服务器排序规修改办法,WordPress手动修改文章排列顺序摆脱按发布时间升降序排列...