2013-05-03 2 views
9

Я пишу некоторые модульные тесты, которые взаимодействуют с базой данных. По этой причине полезно, чтобы в моем модульном тесте был установлен способ настройки и разрыва, чтобы создать и затем отбросить таблицу. Однако there are no docs: О по методу использования-светильников.Clojure: Как использовать-светильники при тестировании

Вот что мне нужно сделать:

(setup-tests) 
(run-tests) 
(teardown-tests) 

Я не заинтересован в настоящее время в управлении установкой и демонтажем до и после каждого испытания, но когда перед группой испытаний и один раз после. Как ты делаешь это?

ответ

17

Вы не можете использовать use-fixtures, чтобы обеспечить установку и код Teardown для свободно определенных групп тестов, но вы можете использовать :once, чтобы обеспечить установку и код Teardown для каждого пространства имен:

;; my/test/config.clj 
(ns my.test.config) 

(defn wrap-setup 
    [f] 
    (println "wrapping setup") 
    ;; note that you generally want to run teardown-tests in a try ... 
    ;; finally construct, but this is just an example 
    (setup-test) 
    (f) 
    (teardown-test))  


;; my/package_test.clj 
(ns my.package-test 
    (:use clojure.test 
     my.test.config)) 

(use-fixtures :once wrap-setup) ; wrap-setup around the whole namespace of tests. 
           ; use :each to wrap around each individual test 
           ; in this package. 

(testing ...) 

Такой подход заставляет некоторые связи между кодом настройки и разрыва и пакетами тестов, но, как правило, это не является большой проблемой. Вы всегда можете сделать свою собственную ручную упаковку в разделах testing, см., Например, the bottom half of this blog post.

+0

Спасибо, я в конечном итоге, используя что-то вроде этого: '(defn тест-нс-крючок [] (создать стол) (пут-4) (пут-5) (получить-2) (получить -3) (получить-4) (скан-2) (скан-3) (скан-4) (капельное стол)) ' –

+0

@DavidWilliams Вы действительно не должны ставить свои тесты в обернуть/крючок. Весь смысл светильников состоит в том, что вы отделяете установочный код от тестов. Вот для чего аргумент (f в моем примере) для крючка; это обратный вызов, который запускает тесты (и любые другие перехватчики) в нужном месте в коде вашего прибора. Затем вы просто определяете свои тесты как обычно (например, с помощью самого быстрого). –

+0

Я согласен с тем, что сообщения в блоге ThornyDev - это хорошее резюме части использования clojure.test для использования. http://thornydev.blogspot.com/2012/09/before-and-after-logic-in-clojuretest.html –

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