2016-12-10 6 views
5

Каков типичный способ структурирования интеграции и модульных тестов в Clojure? До сих пор у меня есть папка test/, которая следует за структурой моего каталога src/. Но я хотел бы разделить их на модульные тесты и интеграционные тесты.Clojure - организация интеграционных тестов

Есть ли рекомендуемая стратегия? Аннотации в тестах? подпапки test/unit и test/integration? Переменные среды?

Примечание: Я использую boot вместо leiningen в случае, если это имеет значение

ответ

6

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

Единственное реальное различие между блоком & интеграционных тестами является

  1. Как долго они принимают, чтобы запустить
  2. Дополнительных настроек с другими частями вашей системы (это также означает, что они медленнее, и/или более трудно бег).

Итак, в любом случае все интеграционные тесты должны быть помечены метаданными ^:integration для каждой функции. Этот метод также полезен при «медленных» модульных тестах.

"медленный" тест может быть помечен как этот (который использует clojure.test.check порождающую тестирование):

(tst/defspec ^:slow round-trip-bytes 9999 
    (prop/for-all [orig gen/bytes] 
    (let [string-b64 (b64/encode-bytes->str orig) 
      result  (b64/decode-str->bytes string-b64) ] 
     (assert (every? b64/base64-chars (seq string-b64))) 
     (assert (types/byte-array? result)) 
     (= (seq orig) (seq result))))) 

Затем в project.clj (не загружается, я знаю), указать:

:test-selectors { :default (complement :slow) 
        :slow  :slow } 

Тогда, когда вы скажете lein run, тесты, отмеченные ^:slow, будут пропущены, а когда вы скажете lein run :all, все тесты (включая «медленные») будут запущены.

Обратите внимание, что нет ключевого слова для ключевого слова :slow. Вы можете заменить любое ключевое слово, которое хотите, например :integration.

Я не использовал boot много, но предполагаю, что подобная техника доступна.

+0

Насколько я знаю, это не то, что существует в данный момент в ботинке, но мне нравится идея. – nha