出於某種原因,我找不到一個,但有人必須已經創建了一個.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