clojureでテスト

clojure.testを使ってテストを書いてみる。テストの書き方には2つ方法がある。

  • defnでの関数定義と一緒にテストを書く
  • deftestで個別にテストを書く

テスト書く->(run-tests)という感じで大丈夫

簡単な例

(use 'clojure.test)
;;metaに:testを定義することも可能。
(defn add2 ([x] (+ x 2))
  {:test #(do (is (= (add2 -1) 1))
	      (is (= (add2 3) 5))
	      (is (= (add2 -4) -2))
	      (is (> (add2 50) 50)))})

;;deftestを利用するときには元の関数と名前が被るとまずい
(deftest add2d
  (is (= (add2 1) 3)))

(run-tests)

結果

Testing user

Ran 2 tests containing 5 assertions.
 0 failures, 0 errors.
{:type :summary, :test 2, :pass 5, :fail 0, :error 0}

追記

makingさんから教えてもらった。

leiningen使う(もしくは今後移行する予定あり)ならtest pathに"run-testsすればテストが実行されるファイル"を置いとくのが無難(デファクト)かと思います