2013-05-03 9 views
9

Sto scrivendo alcuni test unitari che interagiscono con un database. Per questo motivo è utile disporre di un metodo di installazione e di smontaggio nel mio test dell'unità per creare e quindi rilasciare la tabella. Tuttavia there are no docs: O nel metodo di utilizzo delle fixture.Clojure: How To use-fixtures in Test

Ecco quello che ho bisogno di fare:

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

non mi interessa attualmente in esecuzione di un setup e teardown prima e dopo ogni test, ma una volta davanti a un gruppo di test e una volta dopo. Come fai a fare questo?

risposta

17

Non è possibile utilizzare use-fixtures per fornire l'installazione e il codice teardown per gruppi liberamente definiti di prove, ma è possibile utilizzare :once per fornire l'installazione e il codice teardown per ogni spazio dei nomi:

;; 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 ...) 

Questo approccio costringe qualche accoppiamento tra il codice di setup e teardown e i pacchetti in cui si trovano i test, ma generalmente non è un grosso problema. È sempre possibile eseguire il proprio avvolgimento manuale nelle sezioni testing, vedere ad esempio the bottom half of this blog post.

+0

Grazie, ho finito per usare qualcosa di simile: '(defn test-ns-gancio [] (create-tabella) (put-4) (put-5) (get-2) (get -3) (get-4) (scan-2) (scan-3) (scan-4) (drop-table)) ' –

+0

@DavidWilliams non sei suppone davvero mettere le vostre prove in avvolgere/gancio. L'intero punto delle fixture è che si separa il codice di installazione dai test. Questo è ciò che l'argomento (nel mio esempio) dell'amo è per; è il callback che esegue i test (e tutti gli altri hook) nel posto giusto nel codice della fixture. Quindi devi solo definire i tuoi test come al solito (ad esempio, con la massima sicurezza). –

+0

Concordo sul fatto che i post del blog di ThornyDev siano un bel riassunto della parte delle utilità per l'uso di clojure.test. http://thornydev.blogspot.com/2012/09/before-and-after-logic-in-clojuretest.html –