Как проверить работу файловой системы - PullRequest
6 голосов
/ 21 февраля 2011

У меня есть метод, который синхронизирует две папки, который выглядит следующим образом:

void Synchronize(string folderAPath, string folderBPath)
{
    //Code to synchronize the folders
}

Как лучше всего проверить правильность синхронизации файлов или вообще методы проверки, которые манипулируют файловой системой? Есть ли способ настроить виртуальные папки?

Ответы [ 5 ]

8 голосов
/ 21 февраля 2011

Как уже советовал @BrokenGlass, скрытие реального API за симулируемым интерфейсом позволяет вам тестировать свою логику.Я сделал бы это только в том случае, если бы существовала существенная логика, чтобы оправдать дополнительную сложность, необходимую для того, чтобы сделать интерфейсный модуль тестируемым.Проверка того, что код действительно работает в реальных условиях, на реальной файловой системе в любом случае требует интеграционных тестов, поэтому в простых случаях можно пропустить модульные тесты для более эффективного использования ограниченных ресурсов.

7 голосов
/ 21 февраля 2011

Вы можете определить интерфейс IFileSystem, который предоставляет методы, связанные с файлами, и передать его в ваш метод Synchronize.Для реальной системы вы реализуете интерфейс, используя реальный файловый ввод / вывод, для тестирования вы можете передать реализацию, которая просто работает в памяти, основываясь на предварительно настроенных тестовых данных, но не касаясь реальной файловой системы.

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

0 голосов
/ 24 февраля 2011

Не вижу смысла тестировать операции файловой системы.Просто откройте файл, чтобы проверить другие данные, открыв другой файл.

0 голосов
/ 21 февраля 2011

Я использовал виртуальные машины на Hyper-V в прошлом с большим успехом. Вы можете использовать снимки , чтобы создать известное состояние и вернуться к нему столько раз, сколько необходимо для целей тестирования. Возможно, подойдут и другие технологии виртуальных машин.

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

По нашему опыту, это решение доказало превосходство над "ложными" подходами, такими как имитация файловой системы, потому что оно дает нам реальное, грязное, непредсказуемое поведение файловых систем. Недостаточно свободного пространства, проблемы с разрешениями, сбои RAID, проблемы с точками повторной обработки и т. Д., Которые трудно смоделировать.

0 голосов
/ 21 февраля 2011

У вас нет выбора, кроме как написать обертку.

РЕДАКТИРОВАТЬ: обновил ссылку, это NuGet!
Посмотрите на это: http://weblogs.asp.net/bleroy/archive/2010/11/19/fluentpath-1-0.aspx

EDIT
Эрг, только что увидел, что библиотека, с которой я связался, не имеет дополнительного уровня абстракции для включения тестирования. Но эй, это с открытым исходным кодом;)

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