测试由 FileSystemWatcher 引发的事件

本文关键字:事件 FileSystemWatcher 测试 | 更新日期: 2023-09-27 18:32:29

嗨,我目前正在尝试测试配置文件更改失败,

我使用以下代码来执行此操作...

string path = _pathInvalidFormat.Substring(0, _pathInvalidFormat.LastIndexOf(''''));
System.IO.File.Copy("TestInvalidXmlConfigurationFile.xml", _pathInvalidFormat, true);
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(path);
//catch the invalid file getting deleted
fileSystemWatcher.Deleted += new FileSystemEventHandler(fileSystemWatcher_Deleted);
//catch the temporary config file getting renamed
fileSystemWatcher.Renamed += new RenamedEventHandler(fileSystemWatcher_Renamed);
fileSystemWatcher.EnableRaisingEvents = true;
CreateConfig(_pathInvalidFormat);
System.Threading.Thread.Sleep(5000);
Assert.That(_oldFileDeleted);
Assert.That(_newFileCreated);
ResetConfig(_pathInvalidFormat);

但是,我对System.Threading.Thread.Sleep(5000)的使用不满意;

我尝试过使用fileSystemWatcher.WaitForChanged(WatcherChangeTypes.Deleted,5000);但似乎无法让它工作,因为它似乎总是达到超时。即使我可以看到已删除事件已被命中,它仍然没有返回。

或者,是否有更好的方法让系统等待异步事件被触发?

谢谢

基兰

--编辑:

我使用以下方法使用 createconfig(path) 创建一个系统配置文件

private void ReadConfiguration(string path)
{
    var configFileMap = new ExeConfigurationFileMap()
    {
        ExeConfigFilename = path,
    };
    // if we try to read bad formatted file let's
    // 1. delete this file
    // 2. call read configuration to form correct file
    try
    {
        Config = System.Configuration.ConfigurationManager
            .OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
    }
    catch (ConfigurationErrorsException)
    {
        // ok, there is bad format file, let delete it and create another one
        // TODO: check security rights?
        File.Delete(path);
        ReadConfiguration(path);
    }
}

希望这能让我们对我的测试到底想要达到什么目标有所了解。

测试由 FileSystemWatcher 引发的事件

将所有代码放在一个函数中,并与线程异步执行。

现在,您可以使用线程的手动重置事件在删除、重命名和检查无效路径错误时在睡眠后执行进一步的代码。

这样,代码执行就不会被阻止。

例如,请参阅此链接