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.pswp.cn/news/284584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284584.shtml
英文地址,請注明出處:http://en.pswp.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;可…