Hatena::Groupsubtech

#生存戦略 、それは

-> 07 { 01 / 17 }

Re: Test::Base で例外

12:19 | はてなブックマーク - Re: Test::Base で例外 - #生存戦略 、それは

http://moonrock.jp:23000/articles/2007/01/16/tests-the-exception-generating-by-using-test-base

む、どんなテストを想定しているのかよくわからないんですが、自分なら下記のように書きます。

でも確かに block をそのまんま Test::Base の構文として欲しいし、フィルタ内部(この場合は eval フィルタ)で exception が起きたら ApplyFilterError になるのはどうなんじゃろとか思ったり。ruby の block を生かせないと、イテレータの処理がうまくフィルタだけじゃ行えないしなぁ。うーん。

$LOAD_PATH << 'lib'
require 'test/base'

class ExceptionHandlingTest < Test::Base
  filters :o => %w(eval), :raise => %w(eval)
  def run_test(block)
    if block[:raise]
      assert_raise(block[:raise]) do
        eval block[:i]
      end
    else
      assert_equal eval(block[:i].eval), block[:o]
    end
  end
end

__END__
=== ただの equal
--- i
'foo'
--- o
'foo'

=== もし例外が起きたらその1
--- i
raise RuntimeError
--- raise
RuntimeError

=== もし例外が起きたらその2
--- i
'aaa
--- raise
SyntaxError

えいごぶろぐ

11:36 | はてなブックマーク - えいごぶろぐ - #生存戦略 、それは

必要だよなぁ。vox で始めるのはちょうど良いのかもだけど、スーパーpre が使えないと技術系のブログ書くのめんどくさすぎるので typo になんのかなぁ。typo 謎エラーが時たまでて追っかける気が無いのがつらい。。

iwadoniwadon2007/01/17 14:17ありがとうございます! このrun_testメソッドの実装はまさに私の欲しかったものです。"--- raise"というふうに別のを書けるのは、通常の出力と区別できてわかりやすくて良いですね(というか、私はTest::Base自体を勉強すべき(^^;))。

secondlifesecondlife2007/01/17 14:27いえいえ、使ってくれた感想などいただけてうれしかったです!

iwadoniwadon2007/01/17 14:33あとブロック云々ですが、assert_raise相当の機能があるといいなあ程度の気持ちでしたので、それをブロックで表現するかどうかは特に意識してませんでした。
あと想定していたのは、文法エラーで例外が発生するRDtoolのようなライブラリ(まんまText::RDって名前ですが)のテストです。parserのテストで、正常なデータと異常な(文法エラーを含む)テキストを同じテスト中で与えたかったのです。

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20070117