2013-09-28 4 views
1

Модульное тестирование с Midje - отличный опыт, но теперь мне нужно протестировать код, который взаимодействует с filessytem. В частности, код создает представление структуры данных из макета локального каталога.Тестирование кода файловой системы

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

Каков предпочтительный способ проверки кода файловой системы, в Clojure или в целом?

ответ

1

Я не уверен, есть ли что-то, что может помочь вам в работе с файловой системой, но установка и отключение могут быть выполнены с использованием background или against-background (если вам нужна лексическая область).

Основная идея аналогична установки/демонтажа на других языках, вы могли бы сделать что-то вроде этого:

(require '[clojure.java.io :as io]) 

(background (before :facts (io/make-parents "parent/child/file") 
      :after :facts (map io/delete-file (reverse (file-seq (io/file "parent"))) 

(facts "About something or other 
    ...) 

Перед вашими фактами, это создаст parent и child каталоги (а не файл - вы можете добавить в spit или что-то, если вам тоже нужен файл). Тогда после ваших фактов:

  • рекурсивно получает список содержимого каталога parent (с использованием file-seq)
  • reverse S это (потому что мы можем только удалить пустые вещи, так должно начинаться в нижней части дерево каталогов)
  • применяет функцию delete-file для каждого каталога в дереве

код там создавать и удалять файлы, не может быть лучшим (я новичок в этом!), но подход к настройке вверх и срывание материала в тестах Миддже здорово.

Вещи, чтобы отметить:

  • Будьте осторожны с симлинками в дереве при использовании этого подхода, вы можете застрять в цикле.
  • Синтаксис вместо использования макроса (after), чтобы обеспечить срыв, даже если тест выдает исключение.
  • Вы можете выполнить настройку/отключение после подмножества фактов в одном пространстве имен, обернув их (against-background) и сделав то же самое.

Ссылки:

https://github.com/marick/Midje/wiki/Setup,-Teardown,-and-State https://github.com/marick/Midje/wiki/Background-prerequisites

Смежные вопросы