From: shukaku@... Date: 2002-02-13T10:59:30+09:00 Subject: [ruby-list:33881] Re: arguments for def [Re: 右辺の値なしでも実行可能? ] At Wed, 13 Feb 2002 02:14:39 +0900, Masaaki Sakano wrote: > > > lintのような別のツールで良ければ、rubyunitで検査するというのは有効 > > だと思います。例のような場合なら、テストケースでひっかかりますから。 > > # 貴重な情報をありがとうございます。 > 早速、install してみて、助田さんのWWWページから辿れるいくつかの > 文書とか、付属のファイルとか見てみたのですが…、悲しいかな、使い方が > よく分かりません (T_T)。もしよかったら、先の例のケースについて、 > rubyunit をどう適用するか、そのサンプルコードを頂けませんか? Ruby256倍本のどれか(手元になくて確認できません...)にrubyunitのことが載っ てます。翔泳社の"eXtreme Programmingテスト技法"(ISBN4-7981-0128-1)にも rubyunitの章があります。 とりあえずなんですが、下記のような感じでしょうか。本来はクラスを定義す るファイルをrequireで取り込むんですが、下記では直接書いてあります。ファ イル名を"test_string.rb"などとして、実行してみてください。実行結果とし てassert_equals( "", a )が失敗した旨を表示するので、引き数が変化してい ると分かるはずです。 -------- ここから -------- require 'runit/testcase' require 'runit/cui/testrunner' class String def abcdef( s ) s << "abc" s += "def" end end class TestString < RUNIT::TestCase def test_abcdef_variable a = "" b = "xyz".abcdef( a ) assert_equals( "", a ) # 引き数の値が変化する例。 assert_equals( "abcdef", b ) end def test_abcdef_clone a = "" b = "xyz".abcdef( a.clone ) # 複製を渡せば大丈夫。 assert_equals( "", a ) assert_equals( "abcdef", b ) end def test_abcdef_expression a = "" b = "xyz".abcdef( a.clone ) # 式の結果が渡ります。 assert_equals( "", a ) assert_equals( "abcdef", b ) end def test_abcdef_constant b = "xyz".abcdef( "" ) # 定数を渡します。 assert_equals( "abcdef", b ) end end if $0 == __FILE__ if ARGV.size == 0 suite = TestString.suite else suite = RUNIT::TestSuite.new ARGV.each do |testmethod| suite.add(TestString.new(testmethod)) end end RUNIT::CUI::TestRunner.run(suite) end -------- ここまで -------- 実行結果は以下の通り。空文字列を期待してるのに、"abc"になっていると出 てますよね? TestString#test_abcdef_clone . TestString#test_abcdef_constant . TestString#test_abcdef_expression . TestString#test_abcdef_variable F. Time: 0.001775 FAILURES!!! Test Results: Run: 4/4(6 asserts) Failures: 1 Errors: 0 Failures: 1 /home/shukaku/2002.02/ruby/test_string.rb:18:in `test_abcdef_variable'(TestString): expected:<> but was: (RUNIT::AssertionFailedError) from /home/shukaku/2002.02/ruby/test_string.rb:52 ///// ------------------------------------------------------------------ -O-O- 斉藤 秀格 (SAITO Shukaku) @ PUGH (Palm Users Group in Hokkaido) _ master@shukaku.nu (ぱふ) http://www.pugh.palm-j.com/ (旧URL: "http://i.am/PUGH")