小宮です。

From: Masaki Suketa <CQN02273 / nifty.ne.jp>
> 助田です。
> 
> In message "[ruby-ext:01472] Re: RUNIT::Assert#assert_test"
>     on 00/12/26, Kenichi Komiya <kom / mail1.accsnet.ne.jp> writes:
> 
> >   assert ary, :include?, foo
> > 
> > の様に書いたら、コードから自動的にメッセージが生成されれば便利かなという
> > のが私の提案の主旨だったわけです。
> >
> > なので、(名前はともかく)assertはあくまでassertであってassert_equal相当
> > のインタフェースになってもらっては嬉しさ半減だと思います。真偽判定と真偽
> > 値との比較って同じ事なんでしょうけど、気分的に・・・
> >
> 
> なるほど。
> 試しにassert_sendという名前でassertに対応する機能だけ実装してみました。
> 作る段階になって気づいたのですが、コードから自動生成できるメッセージ
> には限界があるし、どういう内容を出せばいいのか悩ましいです。
>
>   ary = [1, 2]
>   assert_send ary, :include?, 3
> 
>   Assertion failed: Array([1, 2])#include?([3])

表示する情報の種類としてはこれで十分な気がします。

  * reciever

  * qualified method name

  * arguments

  * retured value

といったところでしょうか。もっと複雑なケースもあるのかもしれまんせが、一
般的なケースを楽にできれば良いわけですし。

assertを使ってる時は、failしたらデバッグプリイントを入れてもう一度テスト、
しかる後デバッグという感じなのですが、このぐらい視えればすっとデバッグを
開始できるような気がします。少し使ってみると意見が変るかもしれませんが
(^^;

文章スタイルだと長くなると読みづらくような気がします。以下のように列挙し
てしまうのはどうでしょう?

./sample.rb:6:in `test_fail'(Sample): method call test failed

  receiver : {"jun"=>6, "feb"=>2, "apr"=>4, "aug"=>8, "jan"=>1, "nov"=>11, "oct"=>10, "jul"=>7, "dec"=>12, "sep"=>9, "may"=>5, "mar"=>3}

  method   : Hash#has_key?

  args     : "Dec"

  result   : false

(RUNIT::AssertionFailedError)

余談ですが、assert_equalの出力も一文の中に収めてしまう今の表示より、以下
のように表にしてしまった方が見易いと思うのですがどうでしょうか?(まぁ好
みの問題ですが)

./sample:6:in `test_fail'(Sample): equality test failed

  expected : {"Apr"=>4, "Aug"=>8, "Jan"=>1, "Nov"=>11, "Oct"=>10, "Jul"=>7, "Dec"=>12, "Sep"=>9, "May"=>5, "Mar"=>3, "Jun"=>6, "Feb"=>2}

  actual   : {"jun"=>6, "feb"=>2, "apr"=>4, "aug"=>8, "jan"=>1, "nov"=>11, "oct"=>10, "jul"=>7, "dec"=>12, "sep"=>9, "may"=>5, "mar"=>3}

(RUNIT::AssertionFailedError)

> 
> 0.3.2aとして今日中に、公開するつもりなので、メソッドの名前とか
> メッセージの内容について、引続きご意見、要望いただけると嬉しいです。

とりあえずしばらく使ってみてます。

> # assert_equal に対応して、assert_send_equal かな。

これ見て(何故か)ふと思い出しいたので、忘れないうちに書いておきますが、

  assert_equal_float 1, 2, 0

が無限ループします。(ちゃんと使い方知ってる人には見付けられないバグかも 
^^;)

小宮 健一