2013-05-03 15 views
9

Ich schreibe einige Komponententests, die mit einer Datenbank interagieren. Aus diesem Grund ist es nützlich, eine Setup- und eine Teardown-Methode in meinem Komponententest zu haben, um die Tabelle zu erstellen und dann zu löschen. Jedoch there are no docs: O auf die Use-Fixtures-Methode.Clojure: Wie zu verwenden-Fixtures in Testing

Hier ist, was ich tun muß:

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

Ich bin derzeit nicht daran interessiert, einen Auf- und Abbau vor und nach jedem Test in Laufen, aber einmal vor einer Gruppe von Tests und einmal nach. Wie machst Du das?

Antwort

17

können Sie nicht use-fixtures verwenden für frei definierbare Gruppen von Tests Auf- und Abbau-Code zur Verfügung zu stellen, aber Sie können :once verwenden für jeden Namespace Auf- und Abbau-Code zur Verfügung zu stellen:

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

Dieser Ansatz erzwingt eine gewisse Kopplung zwischen Setup- und Teardown-Code und den Paketen, in denen die Tests durchgeführt werden, aber das ist im Allgemeinen kein großes Problem. Sie können Ihre eigene manuelle Umhüllung in testing Abschnitten immer tun, sehen Sie zum Beispiel the bottom half of this blog post.

+0

Danke, endete ich so etwas wie dies mit bis: '(defn Test-ns-hook [] (create-Tabelle) (Put-4) (Put-5) (get-2) (get -3) (get-4) (scan-2) (scan-3) (scan-4) (Drop-Tabelle)) ' –

+0

@DavidWilliams Sie sind nicht wirklich soll die Tests in der platzieren wickeln/haken. Der ganze Sinn von Fixtures ist, dass Sie den Setup-Code von den Tests trennen. Das ist, was das Argument (f in meinem Beispiel) des Hooks ist; es ist der Callback, der die Tests (und alle anderen Hooks) an der richtigen Stelle im Code deines Fixtures ausführt. Dann definieren Sie einfach Ihre Tests wie gewohnt (zum Beispiel mit deftest). –

+0

Ich stimme zu, dass die ThornyDev-Blogposts eine nette Zusammenfassung des Use-Fixtures-Teils von clojure.test sind. http://thornydev.blogspot.com/2012/09/beforeand-after-logic-in-clojuretest.html –