Лучшая практика модульного тестирования при тестировании класса, который читает и пишет в файловую систему - PullRequest
13 голосов
/ 08 сентября 2011

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

Я немного сомневаюсь в том, как спроектировать юнит-тестдля этого класса.Я думаю, что метод установки создает временный каталог и временные файлы в / tmp / somefolder, но я подозреваю, что это плохая идея по нескольким причинам (разработчики используют окна, права доступа к файлам и т. Д.).

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

Каков был бы стандартный способ решения такой проблемы?

Ответы [ 3 ]

11 голосов
/ 08 сентября 2011

При использовании JUnit 4.7 и выше вы можете использовать правило @TemporaryFolder для прозрачного получения временной папки, которая должна автоматически очищаться после каждого теста.

9 голосов
/ 08 сентября 2011

Ваша стратегия верна, ИМО. Просто убедитесь, что вы не жестко закодировали временный каталог. Используйте System.getProperty("java.io.tmpdir"), чтобы получить путь к временному каталогу, и используйте блок finally в вашем тесте или метод @After, чтобы очистить созданные файлы и каталоги после завершения теста.

7 голосов
/ 08 сентября 2011

Можно издеваться над всем, но, вероятно, гораздо больше усилий, чем оно того стоит.Вы можете использовать временный каталог, предоставленный из Java System.getProperty ("java.io.tmpdir"), в который вы сможете писать и т. Д. Независимо от того, в какой системе вы находитесь.Придерживайтесь коротких имен файлов, и вы будете в безопасности, даже работая на чем-то древнем.

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