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:<abc>
(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")