Методы модульного тестирования с файловым вводом-выводом

я пытаюсь привыкнуть к написанию юнит-тестов,Я написал несколько раньше, но ониОбычно я был довольно простой ... ЯЯ хотел бы начать переходить на TDD, так как хочу улучшить качество своего кода (дизайн и структура) - уменьшить связность, и в то же время, надеюсь, уменьшить количество регрессий, которые могут быть получены в тестируемой сборке.

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

Вот типичный пример некоторого кода, извлеченного из проекта:

private string RestoreExtension(String file)
    {
        var unknownFile = Path.GetFileName(file);
        var ignoreDir = Path.GetDirectoryName(file) + "\\Unknown";
        string newFile;

        //We need this library for determining mime
        if (CheckLibrary("urlmon.dll"))
        {
            AddLogLine("Attempting to restore file extension");
            var mime = GetMimeType(BufferFile(file, 256));
            var extension = FileExtensions.FindExtension(mime);
            if (!String.IsNullOrEmpty(extension))
            {
                AddLogLine("Found extension: " + extension);
                newFile = file + "." + extension;
                File.Move(file, newFile);
                return newFile;
            }
        }
        else
        {
            AddLogLine("Unable to load urlmon.dll");
        }

        AddLogLine("Unable to restore file extension");

        if (!Directory.Exists(ignoreDir))
        {
            Directory.CreateDirectory(ignoreDir);
        }
        var time = DateTime.Now;
        const string format = "dd-MM-yyyy HH-mm-ss";

        newFile = ignoreDir + "\\" + unknownFile + "-" + time.ToString(format);
        File.Move(file, newFile);

        return String.Empty;
    }

Вопросы :

Как я могу проверить метод, используя IO? Я нея действительно не хочу использовать настоящий файл, так как это будет медленным (и больше интеграционным тестом?), но я действительно не вижу другого пути. Я мог бы добавить переключаемый слой абстракции ввода / вывода, но для меня это звучит так, как будто это может излишне усложнить код ...

Стоит ли проводить подобный тестовый проект? Я имею в виду, это слишком просто. Как только вы убираете вызовы из .Net и сторонних библиотек, осталось не так уж много ... Так значит ли это, что объем работы по его тестированию означает, что он не является хорошим кандидатом для тестирования?

Многие методы в этом проекте являются частными, так как этот проект является службой Windows. Я'Читая, вы должны действительно тестировать методы, которые являются внешне видимыми (общедоступными или доступными через интерфейс), однако в этом случае маловероятно, что я захочу представить какой-либо из моих собственных методов. Так стоит ли тестировать этот проект (поскольку id, вероятно, нужно либо изменить общедоступные модификаторы методов, либо добавить некоторые атрибуты, чтобы их мог видеть NUnit)?

ура