Kouhei Sutou
kou****@cozmi*****
2008年 10月 22日 (水) 21:57:08 JST
須藤です。 GaUnit 0.1.6をリリースしました。 http://www.cozmixng.org/~rwiki/?cmd=view;name=GaUnit http://www.cozmixng.org/~kou/download/gaunit-0.1.6.tar.gz GaUnitはxUnitベースの単体テストフレームワークです。 gauche.testはテストを書かれた順にそのまま実行する方式ですが、 GaUnitではテストを定義し、テストはフレームワークに実行しても らう方式になります。 gauche.test: (test "add" 3 (lambda () (+ 1 2))) (test "sub" -1 (lambda () (- 1 2))) GaUnit: (define (test-add) (assert-equal 3 (+ 1 2))) (define (test-sub) (assert-equal -1 (- 1 2))) ライブラリを作成する場合など多くの場合は関数を定義する開発方 式をとると思うので、GaUnitは通常の開発と同じようにテストを開 発できた方が楽だろう、という理由でこのような方式になっていま す。 また、GaUnitはテストが失敗した時にできるだけデバッグしやすい ような結果表示を目指しています。 例えば、文字列比較のテストが失敗した場合です。 (test/string.scmより。真ん中のbarをbazに変えてわざと失敗す るように変更している) gauche.test: (test* "string-join" "foo::baz::baz" (string-join '("foo" "bar" "baz") "::")) GaUnit: (define (test-string-join) (assert-equal "foo::baz::baz" (string-join '("foo" "bar" "baz") "::"))) 実行結果です。 gauche.test: test string-join: expects "foo::baz::baz" => got "foo::bar::baz" GaUnit: 1) Failure: test-string-join ./test-string.scm:4: (assert-equal "foo::baz::baz" (string-join '("foo" "bar" "baz") "::")) expected: <"foo::baz::baz"> but was: <"foo::bar::baz"> gauche.testでは1行にコンパクトに表示しますが、GaUnitはもう少 し詳しく表示します。 * Emacsでジャンプできる形式のバックトレース出力 * 期待値と実際の値を縦に並べて違いをわかりやすく表示 GaUnitは期待値または実際の値が複数行に渡る場合等はdiffも表示 し、より早く違いを見つけられるように支援します。 テスト: (define (test-string-join) (assert-equal "foo\nbaz\nbaz" (string-join '("foo" "bar" "baz") "\n"))) 結果: 1) Failure: test-string-join ./test-string.scm:4: (assert-equal "foo\nbaz\nbaz" (string-join '("foo" "bar" "baz") "\n")) expected: <"foo baz baz"> but was: <"foo bar baz"> diff: "foo - baz + bar baz" このように、GaUnitはデバッグがしやすいように、テストが失敗し た場合はできるだけ多くのデバッグに役立ちそうな情報を表示しま す。その一方で、テストが順調に進んでいる時はわりと静かです。 これもgauche.testとは異なります。 もし、単体テストフレームワークにGaUnitを採用する場合でも、も うすでにgauche.testで書かれたテスト資産があることが予想され ます。そのような場合でも既存のテスト資産をできるだけ活かせる ように、今回のリリースでgauche.test互換レイヤーを追加しまし た。前述の例でも使ったtest/string.scm(*)くらいの変なことをし ていないテストであればGaUnitでも実行できます。 (*) http://gauche.svn.sourceforge.net/viewvc/gauche/Gauche/tags/release0_8_13/test/string.scm?view=markup gauche.testでもGaUnitでも自作フレームワークでのよいので、自 分のコードの自動化されたテストを書いてみてはいかがでしょうか。 メンテナンスするつもりのコードであれば、自動化されたテストが あることがいかにありがたいことか、いずれ実感すると思います。