unit test

自分の脳味噌のふがい無さに、unit test toolの導入を決心しました。

common lisp用のunit test toolはいろいろあるようでした。

ぱっと見、CLUnitは良くも悪くも簡単そうでした。テストを実行する関数を指定してテストを行なうので、使うのは簡単だと思います。

しかし、JUnitに慣れてる身としては、テスト失敗したときに、期待値と実測値の差違を見れないと満足できません。

その点、Lisp Unitは、JUnitにインスパイアされて作られたそうで、期待どおりに見えました。

Lisp Unit を clisp で動かす

Lisp Unitのサイトの使い方を見ながらやってみました。

lisp-unit.lispをダウンロードする。

いつも、カレントディレクトリからロードする訳にもいかないので、emacsでいうsite-lispディレクトリを探して man clispしたらヒントが書いてありました。lisp-lib-dir は、*LIB-DIRECTORY* に格納されているパスだということがわかりました。

[1]> *lib-directory*
#P"/usr/lib/clisp/"

cygwinのclispなので、C:\cygwin\lib\clisp *1 に、lisp-unit.lisp を格納しました。ここで、はまりました。*lib-directory* に格納してるのに、(load “lisp-unit.lisp”)ではロードできませんでした。clispで *lib-directory* は、emacsのsite-lispみたいなものじゃないのか?

[1]> (load "/usr/lib/clisp/lisp-unit.lisp")
;; Loading file /usr/lib/clisp/lisp-unit.lisp ...
;; Loaded file /usr/lib/clisp/lisp-unit.lisp
t
[2]> (use-package :lisp-unit)
t
[3]> (defun kakeru (a b) (+ a b))     ;テスト対象 間違った実装
kakeru
[4]> (define-test kakeru
(assert-equal 4 (kakeru 2 2))
(assert-equal 1 (kakeru 1 1)))
kakeru
[5]> (run-tests kakeru)
kakeru: (kakeru 1 1) failed:
Expected 1 but saw 2
kakeru: 1 assertions passed, 1 failed.
[6]> (defun kakeru (a b) (* a b))     ;テスト対象 正しい実装
kakeru
[7]> (run-tests kakeru)
kakeru: 2 assertions passed, 0 failed.

Lisp Unitで書くテストは自然に書けて良いです。これから、しばらく Lisp Unitを使ってみます。

あと、実感したのは動的言語はテストファーストと相性がいい、ということです。

*1:cygpath -w /usr/lib/clisp の結果から

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください