• 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 }  
  • 相关阅读:
    silverlight重写TextBox PassWordBox
    android使用html开发
    SilverLight中DataGrid显示值转换
    STM32 GPIO 的配置与使用
    开始。。
    VCS使用指令
    【转】关闭 Windows 7中的 6to4 隧道
    DC中关于list、双引号和花括号的使用区别
    解决了microblaze在ISE中例化时自动插入IO buffer
    Recovery time 和 Removal time的概念
  • 原文地址:https://www.cnblogs.com/stozen/p/4198329.html
Copyright © 2020-2023  润新知