助田です。

In message "[ruby-list:22778] Re: assert with iterator"
    on 00/05/22, "Masaru Ishii" <mishii / ainix.isac.co.jp> writes:

> assert_no_exception(ArgumentError, NumericError) {
>   Math.sqrt(1)
> }
> 
> でしょうか.
> 引数にある例外は発生してはダメ,というアサートです.

だったら、もう一歩進めて例外が発生しないで正しい
値が返ってくる

   assert_equal(1, Math.sqrt(1))

で十分ではないかと思ったんですけど、RubyUnitのテストで
assert_no_exception みたいなことをやっているんですよねえ。
やっぱり必要か。用意してみましょう。

> また,例外をアサートする場合は,例外が起こってから,
> 例外オブジェクトに対してアサートを書きたくなります.
> messageの内容をアサートするとか.
> これは,assert_exceptionでは対応できませんね.

はい。できません。
assert_exception で
指定した例外が発生したらその例外オブジェクトを返す。
例外が発生しない場合はnilが返ってくる。
で良いですか?
後は例外オブジェクトを煮るなり焼くなり好きにしてもらう。

exception = assert_exception(XXXError) {...}
# exceptionに対する assertを続けて自由に書く。

うーん。でもちょっと気持悪い。もうちょっと良い方法
ないですかね?

  助田 雅紀 <CQN02273 / nifty.ne.jp>