Методы тестирования модулей, содержащие вызовы файловой системы - PullRequest
4 голосов
/ 16 декабря 2008

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

Метод, который я тестирую, выглядит примерно так (c #)

public void Process(string input)
{
    string outputFile = "output.txt";
    this.Transform(input, Resources.XsltFile, outputFile);
    if ((new FileInfo(outputFile)).Length == 0)
    {
        File.Delete(outputFile);
    }
}

Я издеваюсь над методом Transform (..), чтобы ничего не выводить в файл, так как я тестирую метод метода Process, а не метод Transform (..), и поэтому файл output.txt не существует. Поэтому проверка if не проходит.

Как мне сделать это правильно? Должен ли я создать какую-то обертку для файловых методов, которую я бы тоже сменил?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2008

Редактировать Я ответил до того, как вы добавили C # к вопросу (или я пропустил его ...), поэтому мой ответ немного похож на Java, но принципы те же ...


Ваша мысль об обёртке файла IO хорошая. Это один из таких примеров, но все что угодно может сделать:

interface FileProvider {
    public Reader getContentReader(String file);
        // notice use of the Reader interface
        //   - real-life returns a FileReader;
        //   - testing mock returns a StringReader;


    public FileInfo getFileInfo(String path);
        // easy to mock out...
}

class Processor {

    private FileProvider fileProvider;

    public void setFileProvider(FileProvider provider) { 
        this.provider = provider; 
    }

    public void process(String input) {
        // use this.fileProvider for all filesystem operations...
    }
}

Это пример внедрения зависимостей - общий шаблон для упрощения тестирования:

  • Во время тестирования вы можете использовать макет фреймворка, такой как NMock , чтобы смоделировать реализацию FileProvider тестирования;

  • Во время выполнения вы просто подключаете реальную реализацию.

0 голосов
/ 16 декабря 2008

Я думаю, вы должны создать два файла: один с нулевой длиной, а другой с некоторыми данными в нем. Затем вы должны иметь тест для каждого файла. На этапе подготовки вы должны скопировать данный файл в тестовую директорию, запустить тест и после этого проверить, есть ли файл.

...