我有以下的代碼,我想測試:如何編寫依賴文件系統事件的單元測試?
public class DirectoryProcessor
{
public string DirectoryPath
{
get;
set;
}
private FileSystemWatcher watcher;
public event EventHandler<SourceEventArgs> SourceFileChanged;
protected virtual void OnSourceFileChanged(SourceEventArgs e)
{
EventHandler<SourceEventArgs> handler = SourceFileChanged;
if(handler != null)
{
handler(this, e);
}
}
public DirectoryProcessor(string directoryPath)
{
this.DirectoryPath = directoryPath;
this.watcher = new FileSystemWatcher(directoryPath);
this.watcher.Created += new FileSystemEventHandler(Created);
}
void Created(object sender, FileSystemEventArgs e)
{
// process the newly created file
// then raise my own event indicating that processing is done
OnSourceFileChanged(new SourceEventArgs(e.Name));
}
}
基本上,我想寫一個NUnit測試,將做到以下幾點:
- 創建一個目錄
- 設置一個
DirectoryProcessor
- 寫一些文件到目錄(通過
File.WriteAllText()
) - 檢查
DirectoryProcessor.SourceFileChanged
已經ONC解僱e爲在步驟3中添加的每個文件。
我試過這樣做並在步驟3後添加Thread.Sleep()
,但很難使超時正確。它正確地處理我寫入目錄的第一個文件,但不是第二個(並且超時設置爲60秒)。即使我能以這種方式工作,這似乎是編寫測試的可怕方式。
有沒有人有一個很好的解決這個問題?
謝謝!我不熟悉ManualResetClass!總的來說,我認爲文件系統嘲諷是進行單元測試的正確方法。我也喜歡寫這些更多的集成測試,讓我看看代碼是如何工作的。 – Vinay