我有以下要测试的代码:
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
在步骤 3 中添加的每个文件是否已触发一次。
我尝试这样做并Thread.Sleep()
在第 3 步之后添加,但很难让超时正确。它正确处理了我写入目录的第一个文件,但不是第二个(超时设置为 60 秒)。即使我能让它以这种方式工作,这似乎也是一种糟糕的编写测试的方式。
有没有人有一个很好的解决这个问题的方法?