gauche.testを使う

Gaucheを扱う機会があったのだけれど、とりあえずGaucheでもTDDをやりたいということで、その標準の単体テストライブラリであるgauche.testに触れる。

gauche.test

テストコードは以下の様なもの。ソートの関数my-quick-sortをテストする。

(use gauche.test)  
(load "./my-quick-sort")

(test-start "my-quick-sort")  

(test-section "sort values")
(test* "sort positive value" '(1 2 3 6 8 10) (my-quick-sort '(8 6 10 3 2 1)))
(test* "sort negative value" '(-10 -1 4) (my-quick-sort '(-1 4 -10)))
(test* "sort value with duplicate" '(4 4 7 8 8) (my-quick-sort '(8 7 4 4 8)))

(test-section "sort string")
(test* "sort string" '("abc" "e" "zzzz") (my-quick-sort '("zzzz" "e" "abc")))
(test-end) 

「(test* 〜」がテストケース。「test-section〜」がテストのグループ単位になる。
テストが失敗した際は以下のような通知がされる。

Testing my-quick-sort ...                                        
<sort values>------------------------------------------------------------------
test sort positive value, expects (1 2 3 6 8 10) ==> ok
test sort negative value, expects (-10 -1 4) ==> ok
test sort value with duplicate, expects (4 4 7 8 8 9) ==> ERROR: GOT (4 4 7 8 8)
<sort string>------------------------------------------------------------------
test sort string, expects ("abc" "e" "zzzz") ==> ok
failed.
discrepancies found.  Errors are:
test sort value with duplicate: expects (4 4 7 8 8 9) => got (4 4 7 8 8)

Matcherを使ったテスト

katzchangさんがMatcher付きのassertを公開されている(gauche unitを書いた)
これを使うと以下の様な形式でテストが書けるようになる。

(assert (my-quick-sort '(2 3 1)) (is '(1 2 3)))