Groovyなどいくつかの言語のテストフレームワークには、テスト失敗時にコードの各式の値を出力するPower Assertと呼ばれる機能があります。 今回、Ruby 2.0以上 + test-unit向けに同様のものを実装してみました(test-unit-power_assert)。
利用例は以下の通り。
require 'test/unit' require 'test/unit/power_assert' class MyTest < Test::Unit::TestCase def test_failed power_assert do "0".class == "3".to_i.times.map {|i| i + 1 }.class end end end
power_assertメソッドにテスト対象の式をブロックとして与えるだけですが、出来れば-rオプションを使うなどしてテストコードが読み込まれる前にこのライブラリをrequireするようにしておくと情報の取りこぼしを防げます。
# 事前requireなし "0".class == "3".to_i.times.map {|i| i + 1 }.class | | | | | | | | | Array | | | [1, 2, 3] | | #<Enumerator: 3:times> | 3 String # 事前requireあり "0".class == "3".to_i.times.map {|i| i + 1 }.class | | | | | | | | | | | Array | | | | [1, 2, 3] | | | #<Enumerator: 3:times> | | 3 | false String
test-unitにPower Assertが標準機能として取り込まれassertメソッドにブロックを渡せるようになりました ([ruby-list:49902] [ANN] test-unit 3.0.0)。 これを受けてtest-unit-power_assertもバージョンアップを行い、同様の書き方ができるようにしています。