clojure
clojure.test
サーチ…
は
is
マクロはclojure.test
ライブラリの中核です。式が偽の値を返した場合はエラーメッセージを出力し、本文の式の値を返します。
(defn square [x]
(+ x x))
(require '[clojure.test :as t])
(t/is (= 0 (square 0)))
;;=> true
(t/is (= 1 (square 1)))
;;
;; FAIL in () (foo.clj:1)
;; expected: (= 1 (square 1))
;; actual: (not (= 1 2))
;;=> false
テストマクロによる関連テストのグループ化
あなたは、グループ内のアサーションに関連することができますdeftest
使用して、コンテキスト内のユニットテストtesting
マクロを:
(deftest add-nums
(testing "Positive cases"
(is (= 2 (+ 1 1)))
(is (= 4 (+ 2 2))))
(testing "Negative cases"
(is (= -1 (+ 2 -3)))
(is (= -4 (+ 8 -12)))))
これは、実行時にテスト出力を明確にするのに役立ちます。 testing
はdeftest
てtesting
なければならないことに注意してください。
一貫性のあるテストを定義する
deftest
は、他の言語の単体テストと同様に単体テストを定義するためのマクロです。
次のようにテストを作成できます。
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
ここでは、 +
関数をテストadd-nums
というテストを定義します。テストには2つのアサーションがあります。
現在のネームスペースで次のようなテストを実行できます:
(run-tests)
または、テストが実行されているネームスペースのテストを実行するだけです。
(run-tests 'your-ns)
は
ザ・はare
マクロもの一部であるclojure.test
ライブラリ。これにより、テンプレートに対して複数のアサーションを作成できます。
例えば:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
ここで、 (= xy)
各引数を取り、作成テンプレートとして作用is
ことからアサーション。
これは、複数に展開is
たアサーション:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
各テストまたはすべてのテストをuse-fixturesでラップする
use-fixtures
使用すると、テストの前後に実行されるコードで名前空間内の各deftest
ことができます。固定具やスタブに使用できます。
フィクスチャは、テスト機能を実行し、他の必要なステップ(前後、折り返し)で実行する機能に過ぎません。
(ns myapp.test
(require [clojure.test :refer :all])
(defn stub-current-thing [body]
;; with-redefs stubs things/current-thing function to return fixed
;; value for duration of each test
(with-redefs [things/current-thing (fn [] {:foo :bar})]
;; run test body
(body)))
(use-fixtures :each stub-current-thing)
:once
と一緒に使用すると、現在の名前空間内のテストの実行全体が関数でラップされます
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Leiningenによるテストの実行
Leiningenを使用しており、テストがプロジェクトルートのテストディレクトリにある場合は、 lein test
を使用してテストを実行できます