IO扩展控件(System.IO.Abstractions)

刚看到这个Namespace的时候还以为是.Net Framework里自带的包,结果查了一圈无任何结果。
果断上Github搜索,一击即中 https://github.com/tathamoddie/System.IO.Abstractions
先翻译下开发者给出的简单说明,今后再慢慢使用
类似于System.Web.Abstractions的用法,System.IO也被扩展了,它能针对可测的IO进行访问
Just like System.Web.Abstractions, but for System.IO. Yay for testable IO access!
只能用NuGet方式下载
NuGet only:

1 Install-Package System.IO.Abstractions

如果有需要可以下载测试帮助包
and/or:

1 Install-Package System.IO.Abstractions.TestingHelpers

本库最核心的2个文件是IFileSystem和FileSystem。使用IFileSystem.File.ReadAllText等方法替换掉之前的File.ReadAllText等方法。除了一些我们扩展和进行测试的方法外,其他API也基本完全相同。
At the core of the library is IFileSystem and FileSystem. Instead of calling methods like File.ReadAllText directly, use IFileSystem.File.ReadAllText. We have exactly the same API, except that ours is injectable and testable.

1 public class MyComponent  2 {  3     readonly IFileSystem fileSystem;  4    5     // <summary>Create MyComponent with the given fileSystem implementation</summary>   6     public MyComponent(IFileSystem fileSystem)  7     {  8         this.fileSystem = fileSystem;  9     }  
10     /// <summary>Create MyComponent</summary>  11     public MyComponent() : this(  
12         fileSystem: new FileSystem() //use default implementation which calls System.IO  13     )  
14     {  
15     }  
16   17     public void Validate()  
18     {  
19         foreach (var textFile in fileSystem.Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly))  
20         {  
21             var text = fileSystem.File.ReadAllText(textFile);  
22             if (text != "Testing is awesome.")  
23                 throw new NotSupportedException("We can't go on together. It's not me, it's you.");  
24         }  
25     }  
26 }

这个库中还包含了一系列测试程序,来帮助你熟悉它。虽然它不是一个成熟的文件系统,但是它一定会给你带来帮助的。
The library also ships with a series of test helpers to save you from having to mock out every call, for basic scenarios. They are not a complete copy of a real-life file system, but they'll get you most of the way there.

 1 [Test]  

2 public void MyComponent_Validate_ShouldThrowNotSupportedExceptionIfTestingIsNotAwesome()  3 {  4     // Arrange   5     var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>  6     {  7         { @"c:\myfile.txt", new MockFileData("Testing is meh.") },  8         { @"c:\demo\jQuery.js", new MockFileData("some js") },  9         { @"c:\demo\image.gif", new MockFileData(new byte[] { 0x12, 0x34, 0x56, 0xd2 }) }  
10     });  
11     var component = new MyComponent(fileSystem);  
12   13     try  14     {  
15         // Act  16         component.Validate();  
17     }  
18     catch (NotSupportedException ex)  
19     {  
20         // Assert  21         Assert.AreEqual("We can't go on together. It's not me, it's you.", ex.Message);  
22         return;  
23     }  
24   25     Assert.Fail("The expected exception was not thrown.");  
26 }

我们甚至支持把.NET框架里不可测试的类型加入到测试程序里

We even support casting from the .NET Framework's untestable types to our testable wrappers:

 1 FileInfo SomeBadApiMethodThatReturnsFileInfo()  

2 {  3     return new FileInfo("a");  4 }  5    6 void MyFancyMethod()  7 {  8     var testableFileInfo = (FileInfoBase)SomeBadApiMethodThatReturnsFileInfo();  9     //...  10 }

bb8514fafbc490a80f29ae9f1ff10710.jpeg

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

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

相关文章

从零开始学_JavaScript_系列(21)——dojo(8)(手把手教你封装一个widget)

&#xff08;73&#xff09;封装一个widget 醒目&#xff1a;必须在web环境下使用&#xff0c;无论是python的web.py或者是通过http访问网站环境&#xff0c;都可以&#xff0c;但纯本地是不可行的。 首先&#xff0c;什么是widget&#xff1f; 简单来说&#xff0c;就是一个do…

[转]面向对象(1、三大特征;2、六大原则)

目录 一、面向对象的概述&#xff1a; 二、封装&#xff1a; 1、封装概述 2、封装原则 3、封装好处 4、封装坏处 5、封装代码展示 三、继承&#xff1a; 1、概念&#xff1a; 2、实现格式&#xff1a; 3、特点&#xff1a; 4、好处&#xff1a; 5、弊端&#xff1…

Python的MySQLdb模块安装

在配置Django时&#xff0c;选择的是mysql数据库&#xff0c;要安装MySQLdb模块&#xff0c;不过安装过程中&#xff0c;遇到了很多errors&#xff0c;记录一下。 系统:ubuntu 11.10 mysql:直接apt-get安装的&#xff0c;version:5.1.62 到官方下载MySQL for Python 然后解压&a…

【测绘程序设计】C#将度分秒(° ‘ “)转换度(°)程序实现(附源码)

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了Excel中将度分秒转为度的转换程序,本文讲解在Visual Studio中,采用C#语言实现快速度分秒( ’ ")转换度(),提高工作效率。 案例…

Spotlight监控工具使用

Spotlight on unix监控linux服务器 1.下载安装&#xff0c;工具包下载地址&#xff1a; 注&#xff1a;安装之后需要破解注册码 2.由于spotlight不能默认使用root用户登录&#xff0c;所以必须先创建一个具有root权限的用户 注&#xff1a;密码最好不要设置的过于简单化 [rootm…

Grpc MagicOnion库 之 客户端和服务端 (案例版)

之前通过自己写动态代理和用现成的动态代理库等实现过RPC功能&#xff0c;今天&#xff0c;就写一下如何直接引用GRPC的库来实现业务逻辑。gRPC的介绍&#xff0c;之前我也说了这个g的含义太多&#xff0c;也包含谷歌的意思了。可以看这个gRPC的文档介绍 : https://grpc.io/doc…

Windows11右下角出现评估副本水印如何去除?

Universal Watermark Disabler是一款十分好用的桌面工具&#xff0c;这款工具可以帮助用户轻松的去除Windows11 版本的操作系统右下角的水印。 使用方法 1、打开Universal Watermark Disabler软件&#xff0c;显示出当前系统的版本与水印状态。 2、Status中显示Ready for insta…

redhat配置centos的yum源

redhat默认不支持第三方的yum源&#xff0c;要求有rhn账号&#xff0c;下面就rhel5和rhel6改为centos源一、rhel5.5 X86_64更改为centos的yum源查看系统自带的yum相关的rpm包rpm -qa|grep yum删掉系统自带的yum相关的包rpm -e --nodeps yum-updatesd-0 rpm -e --nodeps yum-sec…

【GlobalMapper精品教程】001:GlobalMapper23+24 Pro-x64中文安装教程(附软件包下载)

Global Mapper 23是一款非常专业的地图绘制软件&#xff0c;功能非常的丰富&#xff0c;内置距离和面积计算&#xff0c;包括光栅混合、对比度调节、海拔高度查询、视线计算以及一些高级功能&#xff0c;可轻松实现图像校正、通过地表数据进行轮廓生成、通过地表数据观察分水岭…

JIL 编译与 AOT 编译

JIT&#xff1a;Just-in-time compilation&#xff0c;即时编译&#xff1b;AOT&#xff1a;Ahead-of-time compilation&#xff0c;事前编译。 JVM即时编译&#xff08;JIT&#xff09; 1. 动态编译与静态编译 动态编译&#xff08;dynamic compilation&#xff09;指的是“在…

中台基础指标列表

便于大家进行更方便的指标圈定&#xff0c;这里我将前面提到的通用指标进行一次拓展&#xff0c;为大家整理了一份完整的数据中台基础指标列表&#xff0c;方便大家在搭建指标体系时进行速查。 &#xff08;1&#xff09;App类产品分析指标 &#xff08;2&#xff09;网站类产…

期末作品检查

1、学期个人总结 在这个学期在杜老师的带领下学习了Python语言&#xff0c;这是一门相对于Java语言来说是比较简单的语言&#xff0c;用处也十分的广大。python是一种面向对象的解释型计算机程序设计语言&#xff0c;语法简洁清晰&#xff0c;目前已超越java成为最热门的编程语…

C# 通过不安全代码看内存加载

&#xff08;注&#xff1a;本篇用点长&#xff0c;有点绕&#xff0c;耐心浏览&#xff09;C#中类型分为值类型和引用类型&#xff0c;值类型存储在堆栈中&#xff0c;是栈结构&#xff0c;先进后出&#xff0c;引用类型存储在托管堆中。接下来用不安全代码的地址&#xff0c;…

ArcGIS实验教程——实验四十五:坐标直接转点、线、面案例教程(Create Features From Text File)

外业实测坐标(X、Y、Z)在ArcGIS中可以方便的生成点、点自动连成线、线转面。本实验讲解ArcGIS中从数据文件创建要素工具(Create Features From Text File)生成点、线、面。 文章目录 一、工具快速入门1. 工具添加2. 工具用法二、工具使用方法1. 创建点(Point)2. 创建多点…

湖北省软件行业协会会员单位全名录(2014年的信息)

理事长单位 1.烽火通信科技股份有限公司 副理事长单位&#xff08;排名不分先后&#xff09; 2.武汉大学计算机学院 3.武汉天喻信息产业股份有限公司 4.武汉开目信息技术有限责任公司 5.武汉钢铁工程技术集团自动化有限责任公司 6.武汉菲旺软件技术有限责任公司 7.立得空间信息…

静态html引入js添加随机数后缀防止缓存

在web项目开发中&#xff0c;页面引入js被修改时&#xff0c;为避免浏览器缓存引起的问题&#xff0c;在引入js时&#xff0c;给js名后面加上随机数&#xff0c;以保证每次都发送新的请求。 在jsp中&#xff0c;一般通过后台取随机数即可&#xff0c;代码如下: <script src&…

[转]SDK与API区别

转载&#xff1a;https://www.zhihu.com/question/21691705/answer/149935191 SDK&#xff08;software development kit&#xff09;&#xff0c;中文可译为“软件开发工具包”。 一般都是一些被软件工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件的开…

详谈如何定制自己的博客园皮肤【转】

转自&#xff1a;http://www.cnblogs.com/jingmoxukong/p/7826982.html 目录 前言Quickstart定制博客园 CSS 的原理页面定制CSS代码博客侧边栏公告页首Html代码页脚Html代码定制细节独立控件小老鼠游戏动画动画时钟百度分享栏Github 角标签云背景动画动态标题文章内容样式定制带…

【ArcGIS微课1000例】0025:ArcGIS Online当前未连接到在线资源终极解决办法

ArcGIS Online在线资源列表: World Imagery: 底图服务: 中国地图彩色版: 打开ArcGIS时,系统托盘提示“ArcGIS Online当前未连接到在线资源”,如下图所示,如果无法连接到ArcGIS Online,则就无法添加在线资源,如World Imagery等。 关于该问题,网上有多种解决办法,然而…

学习.NET ,提升.NET技能,这些公众号得关注

时逢七月&#xff0c;白云在天&#xff0c;绿水环山&#xff0c;甚是悠闲。可是&#xff0c;学路上的我们却四处彷徨。学海无涯&#xff0c;我仍苦寻渡口&#xff1b;学路漫漫&#xff0c;我却愁无舟楫。我不禁四下扫视&#xff0c;自语问天&#xff0c;学须有成&#xff0c;可…