Chukanにユニットテストフレームワークを統合してみる

perl界でよく使われているらしいproveで実行できるユニットテストフレームワークを書いてChukanに統合してみた。理由は?と聞かれれば Chukan::Test が作りたかった!Ruby的にはRSpecを使っておけばいい気がする。
見た目的にはperlのTest::BaseのRuby移植版、かも知れない。
分散システムのテストで書きたくなる手続き型のテストと、データ駆動型のテストを混ぜて書ける。


テストケースの例:

#!/usr/bin/env ruby
require 'chukan'
include Chukan::Test  # テスト開始

test "load mylibrary" do   # test "テスト名" do
  require "mylibrary"      #   真を返すハズのブロック
end                        # end

run {|b|                   # __END__ 以下のYAMLドキュメントを繰り返し
  test b.name do
    b.score <= 100
  end
}

# mainの終了と同時にテスト終了
__END__
---
name:  test A
user:  a-san
score: 10
---
name:  test B
user:  b-san
score: 100


実行例:

$ prove 01_example.rb
01_example....
01_example.rb:6:in `require': no such file to load -- mylibrary (LoadError)
	from  01_example.rb:6
	from  01_example.rb:5
Finished in 0.028043 seconds.

3 tests, 3 assertions, 0 failures, 1 errors
01_example....FAILED test 1                                                  
	Failed 1/3 tests, 66.67% okay
Failed Test   Stat Wstat Total Fail  Failed  List of Failed
-------------------------------------------------------------------------------
01_example.rb                3    1  33.33%  1
Failed 1/1 test scripts, 0.00% okay. 1/3 subtests failed, 66.67% okay.

"mylibrary"などというライブラリは無いのでテストが1つ失敗している。


ちなみに普通に実行すると:

$ ruby 01_example.rb 

not ok 1 - load mylibrary
01_example.rb:6:in `require': no such file to load -- mylibrary (LoadError)
	from  01_example.rb:6
	from  01_example.rb:5

ok 2 - test A

ok 3 - test B

1..3
Finished in 0.044268 seconds.

3 tests, 3 assertions, 0 failures, 1 errors

メッセージにはそこそこカラフルに色が付いていて、地味なテストに華を与える。