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
メッセージにはそこそこカラフルに色が付いていて、地味なテストに華を与える。