Макет файловой системы в интеграционном тестировании - PullRequest
17 голосов
/ 13 ноября 2008

Я пишу программу ruby, которая выполняет некоторые внешние утилиты командной строки. Как я мог издеваться над файловой системой из моих тестов rspec, чтобы я мог легко настроить некоторую файловую иерархию и проверить ее после тестирования. Также было бы лучше, чтобы его реализовали в оперативной памяти, чтобы тесты выполнялись быстро.

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

Ответы [ 3 ]

38 голосов
/ 01 декабря 2009

Вы проверили FakeFS или MockFS ?

Примечание: оригинальная ссылка на MockFS не работает. Это выглядит как , оно больше не поддерживается.

8 голосов
/ 13 ноября 2008

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

Когда дело доходит до утверждений, я использую обычный File.exist? или File.directory?, но, конечно, вы можете создавать свои собственные обертки вокруг него. Если вам нужно какое-то начальное состояние, вы можете создать каталог, который можно будет использовать в качестве прибора и который будет скопирован во временный каталог во время настройки теста.

6 голосов
/ 13 ноября 2008

Вы можете создать большой файл (размер вашего фиктивного диска) и смонтировать файл как устройство с обратной связью . На этом устройстве вы можете создать любую файловую систему и структуру каталогов.
Вы можете создать 2 из них и сделать даже простое сравнение различий, чтобы обеспечить целостность данных после испытаний.
Я надеюсь, что правильно понимаю ваши требования, так как не уверен, почему простое решение ramdisk недостаточно хорошо.
Это также может иметь значение.

...