2013-05-03 8 views
9

データベースとやり取りする単体テストをいくつか書いています。このため、テーブルを作成して削除するために、単体テストでセットアップとティアダウンの方法を使用すると便利です。ただし、there are no docs:使用固定法ではOです。しかし、一度テストのグループの前と後に1回、Clojure:テストでフィクスチャを使用する方法

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

私は現在、各テストの前と後のセットアップとティアダウンを実行していることに興味はないです:ここでは

は私が何をする必要があるかです。これどうやってやるの?

答えて

17

あなたは、テストの自由に定義されたグループのセットアップとティアダウンのコードを提供するために、use-fixturesを使用することはできませんが、各名前空間のセットアップとティアダウンのコードを提供するために、:onceを使用することができます。

;; 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を参照)。 `(DEFNテスト-NS-フックが[] は(作成-表) (入れ-4)を (入れ-5)を (取得-2)を (取得:

+0

おかげで、私はこのようなものを使用して終了しました-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 –

関連する問題