出於某種原因,我找不到一個,但有人必須已經創建了一個.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. 安裝文件系統
- 3. 文件系統同步庫?
- 4. 用於安裝的免費庫*用於.NET的nix和mac文件系統?
- 5. 分佈式文件系統.NET
- 6. Recomendations的文件系統基於.NET的媒體庫
- 7. mkfs.xfs包含一個安裝的文件系統
- 8. 裝載的jQuery從文件系統
- 9. .NET項目:對象數據庫的統一包裝器
- 10. Android的文件系統包括
- 11. Python包不是從文件系統
- 12. 使用pip從本地文件系統文件夾安裝Python包
- 13. COM包裝.Net dll配置文件
- 14. IDE像系統 - 數據庫或文件系統的存儲
- 15. 的Hadoop文件系統是物理文件系統或虛擬文件系統
- 16. 是否有用於C++的操作系統API包裝庫?
- 17. 蟒蛇,其中在系統安裝包
- 18. Linux glibc系統調用包裝位置
- 19. 自舉網格系統包裝
- 20. 在Win32系統中安裝R包「CATBOOST」
- 21. 播放更改默認包裝系統
- 22. asp.net庫訪問android文件系統
- 23. 文件系統v/s數據庫
- 24. 數據庫的文件系統語義
- 25. Ruby通用文件系統庫
- 26. 什麼是數據庫文件系統?
- 27. 在替代系統中安裝OpenBLAS庫
- 28. 裝入系統間緩存數據庫
- 29. 安裝程序需要.NET 4.0 - 系統已具有.net 4.0
- 30. 系統包名
解釋一下你的意思是「建在靜態方法不適合好這一點。」你在尋找哪些.NET不提供的功能? – 2009-04-10 15:59:21
依賴注入,嘲諷和其他任何很難用靜態方法和類 – leora 2009-04-10 16:08:40