0

midjeフォームにラップfactsして、with-state-changesそれらまたはコンテンツの前、前後、または後に具体的に何を実行するかを指定できるようにするのと同じように、clojure.test で同じことをどのように達成しますか?

4

1 に答える 1

1

clojure.test のフィクスチャは、関数を引数として取り、セットアップを行い、関数を呼び出し、クリーンアップを行う関数です。

テスト (deftest で作成) は、引数を取らず、適切なテストを実行する関数です。

したがって、フィクスチャをテストに適用するには、そのテストをフィクスチャでラップするだけです

user> (require '[clojure.test :refer [deftest is testing]])
nil

テストする関数:

user> (def add +)
#'user/add

それのためのテスト:

user> (deftest foo (is (= (add 2 2) 5)))
#'user/foo

テストに合格できるように数学を変更するフィクスチャを作成します。

user> (defn new-math-fixture [f]
        (println "setup new math")
        (with-redefs [add (constantly 5)]
          (f))
        (println "cleanup new math"))
#'user/new-math-fixture

フィクスチャがないと、テストは失敗します。

user> (foo)

FAIL in (foo) (form-init5509471465153166515.clj:574)
expected: (= (add 2 2) 5)
  actual: (not (= 4 5))
nil

数学を変更すると、テストは問題ありません。

user> (testing "new math"
        (new-math-fixture foo))
setup new math
cleanup new math
nil
user> (testing "new math"
        (deftest new-math-tests
          (new-math-fixture foo)))
#'user/new-math-tests
user> (new-math-tests)
setup new math
cleanup new math
nil
于 2016-05-24T21:55:35.387 に答える