Как юнит методы тестирования, которые создают и читают файлы - PullRequest
12 голосов
/ 20 мая 2011

Я реализовал два статических void метода, которые создают файлы и читают файлы.И я хочу протестировать методы, но я не знаю, как тестировать методы, которые работают с файлами.Каков наилучший способ сделать это?

Я использую Java и JUnit.

Ответы [ 2 ]

18 голосов
/ 20 мая 2011

Лучше всего было бы реорганизовать ваши методы для работы с потоками ввода / вывода, а не с файлами напрямую. Таким образом, вы можете легко передать StringReaders / Writers им в модульных тестах (при условии, что они работают с текстовыми файлами - если нет, вам нужны соответствующие типы потоков).

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

3 голосов
/ 20 мая 2011

вы можете создать каталог test / resources с файлами в нем специально для тестирования.Недостатком этого является то, что ваш код должен иметь возможность передавать путь, что не должно быть слишком большим препятствием, даже если код не спроектирован таким образом.

так в вашем тестевам бы хотелось иметь что-то вроде

public void testUtilWrite() {
    YourUtil.writeFile(path, data); //whatever you have

    File shouldExist = new File(path);
    assertTrue(file.exists());
    // now read the file and assert the data in it is correct
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...