出于某种原因,我找不到一个,但有人必须已经创建了一个.NET IO库包装。我想能够模拟对File.Exists等的调用,而静态方法内置并不能很好地解决这个问题。.NET文件系统包装库
回答
还有一个FileInfo class,它做同样的事情,静态方法。
在另一方面,你可能不想嘲笑FileInfo类的全部。相反,您希望将所有文件操作放入一个类中,然后从该类中提取一个接口(描述公共方法),并使用该接口来模拟您执行的文件操作,而不是整个Microsoft认为应该在FileInfo类中的操作。
而不是寻找包装整个文件系统的库。为什么不创建一个简单的IFileSystem接口并开始添加所需的方法。
您的应用程序应该依赖于IFileSystem的其余部分,这将允许嘲弄
你可以有一个实现简单地调用静态方法,净给你,然后你的代码可以依赖的接口。
这是我在过去所做的那样,但我厌倦了不断重新产生在每一个项目我工作的这个接口。寻找一个小代码在这里重复使用。 – Sneal 2009-04-10 16:34:48
所有很好的答案,但他们都离开了我,我开始 - 重建某种IFileSystem的每一个项目我结束了工作。我最终创建了一个围绕.NET库的通用IFileSystem库,我可以在所有项目之间使用该库。不是很好,但它现在起作用。
我发现SystemWrapper几分钟前你,但你适合我的目的,更好。
我保持在CodePlex上的Jolt.NET项目,该项目包含一个库来产生这样的接口和他们为你实现。有关更多信息,请参阅Jolt.Testing库。
https://github.com/tathamoddie/System.IO.Abstractions可以让你做到这一点(从GitHub例子)
public class MyComponent
{
readonly IFileSystem fileSystem;
// <summary>Create MyComponent with the given fileSystem implementation</summary>
public MyComponent(IFileSystem fileSystem)
{
this.fileSystem = fileSystem;
}
/// <summary>Create MyComponent</summary>
public MyComponent() : this(
fileSystem: new FileSystem() //use default implementation which calls System.IO
)
{
}
public void Validate()
{
foreach (var textFile in fileSystem.Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly))
{
var text = fileSystem.File.ReadAllText(textFile);
if (text != "Testing is awesome.")
throw new NotSupportedException("We can't go on together. It's not me, it's you.");
}
}
}
- 1. 从文件系统运行SSIS包装
- 2. .net文件管理系统
- 3. 安装文件系统
- 4. android ndk包装C++文件获取android系统文件路径
- 5. 用于安装的免费库*用于.NET的nix和mac文件系统?
- 6. 文件系统同步库?
- 7. ACE库和文件系统
- 8. 在初始RAM文件系统上从源安装软件包
- 9. 分布式文件系统.NET
- 10. Recomendations的文件系统基于.NET的媒体库
- 11. 在文件系统中封装OSGi包的类/接口
- 12. mkfs.xfs包含一个安装的文件系统
- 13. 安装的Hadoop文件系统
- 14. 文件系统安装内部
- 15. 装载的jQuery从文件系统
- 16. 分层文件系统和卷安装
- 17. 用Micropython文件系统装载NodeMCU?
- 18. QT DBUS安装文件系统
- 19. .NET项目:对象数据库的统一包装器
- 20. COM包装.Net dll配置文件
- 21. VS2010标准系统包含文件
- 22. Android的文件系统包括
- 23. Python包不是从文件系统
- 24. SSIS包自动部署从存储库到文件系统
- 25. 使用pip从本地文件系统文件夹安装Python包
- 26. IDE像系统 - 数据库或文件系统的存储
- 27. 的Hadoop文件系统是物理文件系统或虚拟文件系统
- 28. 是否有用于C++的操作系统API包装库?
- 29. Linux glibc系统调用包装位置
- 30. 系统剪贴板上的包装
解释一下你的意思是“建在静态方法不适合好这一点。”你在寻找哪些.NET不提供的功能? – 2009-04-10 15:59:21
依赖注入,嘲讽和其他任何很难用静态方法和类 – leora 2009-04-10 16:08:40