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)))