Есть класс, осуществляющий операции с файловай системой. Кроме непосредственной записи и чтения из файлов, этот класс содержит некоторую логику — проверку валидности имен и т.п. Как правильно организовать тестирование такого класса? Нужно ли строить абстракцию поверх стандартного в .NET механизма работы с файлами? Или имеются готовые библиотеки-обертки для этих целей?
Как тестировать логику работы с файловой системой (C#)
Лучший ответ:
Вот статья по поводу: File and File Container Wrapper Library on CodePlex. Вольный перевод:
Некоторое время назад мы говорили об обертках над объеками файловой системы и тестировании этого дела на ALT.NET mailing list. Этот вопрос связан с тестированием работы с файлами без непосредственного обращения к этим файлам (ведь всем известно, что модульные тесты не должны зависить от внешних объектов). Было бы очень классно иметь обетки над объектами ФС. Это позволило бы
- забыть о необходимости написания собственных оберток;
- использовать Rhino Mocks (или любой подобный фреймворк) чтобы генерировать заглушки для тестов.
Я создал проект, реализующий эту идею, и теперь он размещен на CodePlex. Проект включает интерфейсы (IFile и IFileContainer), представляющие абстракции над любым типом объекта файловой системы - файлом или контейнером файлов. Можно использовать dependency injection (DI), чтобы передавать конкретные реализации этих интерфейсов в соответствующие сервисы/объекты, а для тестов использовать заглушки.
Есть 3 конкретные реализации (см. FileStrategyLib.dll) для
- файлов (IFile)
- папок (IFileContainer)
- и zip-архивов (IFileContainer + SharpZipLib).
Также в решении есть проект с 10-ю модульными тестами, покрывающими всю логику на 97%.
Итак,
- ссылка на проект Codeplex - File and File Container Wrapper
- Примеры использования