Тестирование кода файловой системы

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

Что-то, что приходит на ум, - это создание каталогов и файлов в / 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 каталоги (не файл - вы можете добавить его в плевок или еще что-нибудь, если вам тоже нужен файл). Тогда после ваших фактов это:

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

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

Что следует отметить:

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

Рекомендации:

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

Другие вопросы по тегам