zoukankan      html  css  js  c++  java
  • 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:demojQuery.js", new MockFileData("some js") },  
     9         { @"c:demoimage.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 }  
  • 相关阅读:
    WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )
    TCP 流模式与UDP数据报模式(转)
    hibernate 检索方式
    【UVA】1449-Dominating Patterns(AC自己主动机)
    软件项目工作流程图
    iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下
    东莞无人工厂变成现实,中国无人工厂将非常快普及,保住世界工厂地位
    小米手机与魅族的PK战结果 说明了什么
    python Debug 单步调试
    合并两个排序的单链表
  • 原文地址:https://www.cnblogs.com/stozen/p/4198329.html
Copyright © 2011-2022 走看看