methods=
sublibraries=test.unit.testcase,test.unit.assertions
requires=test.unit.assertions,test.unit.testcase
classes=Test=Unit
is_sublibrary=false

ユニットテストを行うためのライブラリです。


test/unit は [[lib:minitest/unit]] を使って再実装されましたが、完全な互
換性がある訳ではありません。

=== 使い方

Test::Unit は以下のように使います。

まずテスト対象のソース(foo.rb)が必要です。

    class Foo
       def foo
         "foo"
       end
       def bar
         "foo"
       end
    end

次にユニットテスト(test_foo.rb)を書きます。テストを実行するメソッド(テストメソッド)の名前は
全て test_ で始まる必要があります。テストメソッドが実行される前には setup メソッドが必ず
呼ばれます。実行されたあとには、teardown メソッドが必ず呼ばれます。

    require 'test/unit'
    require 'foo'

    class TC_Foo < Test::Unit::TestCase
      def setup
        @obj = Foo.new
      end

      # def teardown
      # end

      def test_foo
        assert_equal("foo", @obj.foo)
      end
      def test_bar
        assert_equal("bar", @obj.bar)
      end
    end

テストを実行するには上で用意した test_foo.rb を実行します。
デフォルトではすべてのテストが実行されます。


        $ ruby test_foo.rb

        Loaded suite test_foo
        Started
        F.
        Finished in 0.022223 seconds.

          1) Failure:
        test_bar(TC_Foo) [test_foo.rb:16]:
        <"bar"> expected but was
        <"foo">.

        2 tests, 2 assertions, 1 failures, 0 errors, 0 skips

test_bar だけテストしたい場合は以下のようなオプションを与えます。

        $ ruby test_foo.rb --name test_bar

        Loaded suite test_foo
        Started
        F
        Finished in 0.019573 seconds.

          1) Failure:
        test_bar(TC_Foo) [test_foo.rb:16]:
        <"bar"> expected but was
        <"foo">.

        1 tests, 1 assertions, 1 failures, 0 errors, 0 skips

--name=test_barのような指定は行えません。その他の使用可能なオプションにつ
いては、[[lib:minitest/unit]]と同様です。


複数のテストを一度に行う場合、以下のように書いただけのファイルを実行します。

 require 'test/unit'
 require 'test_foo.rb'
 require 'test_bar.rb'


=== いつテストは実行されるか

上の例では、テストクラスを「定義しただけ」で、テストが実行されています。
これは、require 'test/unit'した時に[[m:MiniTest::Unit.autorun]]を実行し
ているためです。その結果、終了時の後処理として実行されるようになってい
ます。

=== Error と Failure の違い

: Error
  テストメソッド実行中に例外が発生した。

: Failure
  アサーションに失敗した。
