Правильный способ имитировать IFileSystemWatcher с помощью IFileSystemC#

Место общения программистов C#
Ответить
Anonymous
 Правильный способ имитировать IFileSystemWatcher с помощью IFileSystem

Сообщение Anonymous »

Я создал простой класс со структурой IFileSystem и файлом, который отслеживается с помощью IFileSystemWatcher. Я пытаюсь создать для него пробные тесты, но почему-то OnChanged не запускается в пробном тесте, когда я удаляю файл.

Код: Выделить всё

using System.IO.Abstractions;

public class TestFileWatcher
{
private readonly IFileSystemWatcher _fileWatcher;
private readonly IFileSystem _fileSystem;
public bool isDeleted = false;

public TestFileWatcher(IFileSystem fileSystem)
{
_fileSystem = fileSystem;
_fileWatcher = _fileSystem.FileSystemWatcher.CreateNew();

AddFileWatch("deleteFile");
}

private void AddFileWatch(string path)
{
_fileWatcher.Path = _fileSystem.Path.GetDirectoryName(path);
_fileWatcher.Filter = _fileSystem.Path.GetFileName(path);

_fileWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.LastAccess
| NotifyFilters.DirectoryName | NotifyFilters.FileName;

_fileWatcher.Created += new FileSystemEventHandler(OnChanged);
_fileWatcher.Changed += new FileSystemEventHandler(OnChanged);
_fileWatcher.Deleted += new FileSystemEventHandler(OnChanged);

_fileWatcher.EnableRaisingEvents = true;
}

private void OnChanged(object source, FileSystemEventArgs e)
{
FileInfo fi = new FileInfo(e.FullPath);
fi.Refresh();
isDeleted = true;
}

}
Вот пробный тест:

Код: Выделить всё

using System.IO.Abstractions;
using System.IO.Abstractions.TestingHelpers;
using Moq;
using Xunit;

[Collection("Sequential")]
public class MockTests
{
[Fact]
public void Mock_TestFileWatcher()
{
var _mockFileSystem = new MockFileSystem()
{
FileSystemWatcher = new FileSystemWatcherFactory()
};
_mockFileSystem.AddFile("deleteFile", new MockFileData(""));

var test = new Mock(_mockFileSystem).Object;
_mockFileSystem.File.Delete("deleteFile");
Assert.True(test.isDeleted);
}
}
Это отлично работает в реальной файловой структуре, но почему-то не работает в макете. Думаю, это может быть связано с тем, как FileSystemWatcherFactory создается в макете, но я не уверен, как это исправить.
Буду признателен за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/789 ... filesystem
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»