#:g1: stefilの紹介

Posted 2014-06-17 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の169日目です。

stefilとはなにか

 stefilは、割と良く使われているテストフレームワークです。作者はdwim.hu周辺の人達でしょうか。dwim.hu版もhu.dwim.stefilとしてQuicklispでインストールできます。

パッケージ情報

パッケージ名stefil
Quicklisp
プロジェクトサイトStefil demo
CLiKihttp://cliki.net/stefil
Quickdocshttp://quickdocs.org/stefil
CL Test Grid: ビルド状況stefil | CL Test Grid

インストール方法

(ql:quickload :stefil)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 stefilは、Simple Test Framework In Lispの略らしいですが、fiveamとstefilは非常に良く似ています。
どっちが先なのかを調べても結局良く分からなかったのですが、ファイルに記載の日付によれば、fiveamが2002年位の開発開始でstefilが2006年頃のようなのでfiveamの方が古いのでしょうか。
stefilとfiveamはテストの書き方も殆ど同じですが、fiveamがtestに対しstefilはdeftestを使います。
テストは、suiteという単位で管理可能で、階層化することも可能です。
isで値のチェック、signalsでコンディションのチェックというのもfiveamと同じです。
また、テストの実行は、defsuiteで定義したシンボルに関数が付くので、それを実行します。

(defpackage :stefil.example
  (:use :cl :stefil))

(defsuite stefil.example)

(in-suite stefil.example)

(defun list-42 () (*:iota 42))

(defun list-100 () (*:iota 100))

(deftest length=42 () (is (= 42 (length (list-42)))))

(deftest length=100 () (is (= 100 (length (list-100)))) (is (= 100 (length (list-42)))))

(define-condition latumofis (error) ())

(deftest signal-latumofis () (signals latumofis (error 'latumofis)))

 SLIMEのデバッガとの連携も可能で、テストが失敗時のデバッガの表示が分かり易くなっていたりもします。

Test assertion failed:

Binary predicate (= X Y) failed. x: 100 => 100 y: (LENGTH (LIST-42)) => 42 [Condition of type STEFIL::ASSERTION-FAILED]

Restarts: 0: [CONTINUE] Roger, go on testing... 1: [CONTINUE] Skip the rest of the test LENGTH=100 and continue by returning (values) 2: [RETEST] Rerun the test LENGTH=100 3: [CONTINUE] Skip the rest of the test STEFIL-MAHAMAN and continue by returning (values) 4: [RETEST] Rerun the test STEFIL-MAHAMAN 5: [CONTINUE-WITHOUT-DEBUGGING] Turn off debugging for this test session and invoke the first CONTINUE restart --more--

stefilとasdf:test-systemの連携

 いくつかのプロジェクトを眺めてみる感じでは、大体

(defsystem :stefil.example
  :serial t
  :depends-on (:stefil ...)
  :components ((:file "package")
               ...
               (:file "test"))
  :in-order-to ((test-op (load-op :stefil.example)))
  :perform (test-op (op c)
             (symbol-call :stefil.example :stefil.example)))

位の書き方でasdf:test-systemを実行させることが多いようです。シンプルで良いですね。

まとめ

 今回は、stefilを紹介してみました。
stefil以外にもeosあたりもfiveamに非常に似ていますが、これらはフォークしたのか、お互いに似せて作ったのか、どうも判然としないことが多いみたいですね。

comments powered by Disqus