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

я пытаюсь привыкнуть к написанию юнит-тестов,Я написал несколько раньше, но ониОбычно я был довольно простой ... ЯЯ хотел бы начать переходить на 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)?

ура

Ответы на вопрос(4)

Ваш ответ на вопрос