目录

介绍

背景

使用代码


  • 下载源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单元测试中使用嵌入式资源相关推荐

  1. 单元测试中 Right-BICEP 和 CORRECT

    My Blog:http://www.outflush.com/ 在单元测试中,有6个总结出的值得测试的方面,这6个方面统称为 Right-BICEP,通过这6个方面的指导,可以较完全的测试出代码中的 ...

  2. IBM技术论坛:使用 Cobertura 和反射机制提高单元测试中的代码覆盖率

    引言 单元测试是软件开发过程中重要的质量保证环节.单元测试可以减少代码中潜在的错误,使缺陷更早地被发现,从而降低了软件的维护成本.软件代码的质量由单元测试来保证,而单元测试自身的质量与效率问题也不容忽 ...

  3. 【全面解析Mock】Mock在单元测试中扮演一个什么角色?

    目录 一.Mock在单元测试中扮演一个什么角色 二.测试准备 三.使用Mock的理由 四.使用Python Mock 五.MagicMock类 六.mock.create_autospce 七.moc ...

  4. Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解

    在Junit4中还有的测试注解有:  @BeforeClass ,@Before,@Test,@After,@AfterClass 1.其中:@BeforeClass,@AfterClass是Juni ...

  5. linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源

    三.[GPIO驱动框架>向omap_hwmod中添加GPIO资源] ***将GPIO硬件信息添加到注册到omap_hwmod_list列表中 Arch/arm/plat-omap/include ...

  6. 9 单元测试中不得不知的概念

    单元测试中不得不知的概念 前言 软件单元及单元测试 驱动函数和桩函数 总结 前言 做单元测试,如果不弄清楚什么是单元,那十八般武器也无的放矢了.可能在单元测试中听到最多的就是驱动函数.桩函数和逻辑覆盖 ...

  7. Spring-Boot:写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的图标资源?

    Spring-Boot:Spring-Boot写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的 ...

  8. oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死 解决方法

    oracle中"ORA-00060: 等待资源时检测到死锁" 或存储过程编译卡死 解决方法 参考文章: (1)oracle中"ORA-00060: 等待资源时检测到死锁& ...

  9. java中如何就绝对定位,Java中如何定位资源

    Java中如何定位资源 本文来自:http://blog.csdn.net/ruyanhai/archive/2007/11/07/1871663.aspx ◆ 一般情况下,我们都使用相对路径来获取资 ...

最新文章

  1. 不知道这些,简历上千万不要说你会 Redis 持久化。。。
  2. Spark2.X环境准备、编译部署及运行
  3. Emoji表情符号兼容方案(适用ios,android,wp等平台)
  4. linux中的目录结构---Linux学习笔记
  5. cx oracle 配置,cx_Oracle的配置啊。。终于搞出来了
  6. 进击的二维码 | ArcBlock 课堂预告
  7. resiprocate 之repro注册
  8. ASP.NET2.0 Person Web Site:将图片以二进制的从数据库读取
  9. 如何应对互联网和物联网化带来的工业安全新风险?
  10. 非华为电脑安装华为电脑管家11.1.1.101
  11. python的基本函数图像_python绘制基本初等函数图像
  12. 如何快速从入门到精通linux
  13. 高薪职业,英年早秃?关于程序员,多的是你不知道的事……
  14. Redis生成自增流水号,每日清零
  15. 积分营销系统的优势知多少
  16. 模型实践 | AI驱动的全球精准气象预报
  17. FrameMaker 格式的本地化流程
  18. 动画 + 大白话讲清楚React渲染原理
  19. CSS学习笔记一 ——详细附图、入门必看
  20. Python计算温度植被干旱指数(TVDI)

热门文章

  1. wxpython textctrl_如何从wxpython中的textctrl接受值
  2. 广西专业技术人员职称个人版_「职称评审」机械工程专业技术人员如何写职称论文?...
  3. python 判断线程状态_Python 线程和进程
  4. mysql+存储过程+模式,Mysql(7)---存储过程
  5. echarts grid的样式位置_vue使用Echarts vue使用Echarts滚动条
  6. QT创建文件夹(QDir方式)
  7. Mpi与Cuda混合编程(Makefile)
  8. jquery生成一个li_如何使用jQuery从字符串数组生成UL Li列表?
  9. 小程序突然报module is not defined_菲尔德睡前英语小故事 | 狼来了
  10. 服务器排序规修改办法,WordPress手动修改文章排列顺序摆脱按发布时间升降序排列...