test-unitについて

今回はRubygemtest-unitを動かしてみたので、それのアウトプットを自分用に残しておきます。

test-unitの使い方は、

require 'test/unit'

class hoge < Test::Unit::TestCase
end

のように、requireでtest/unitを呼び出し、テストコードを書くクラスにTest::Unit::TestCaseを継承させることで使用することができます。

では、チュートリアルはここまでで、実際に参考サイトを元にとりあえず、動かしてみました。

  • サンプルコード
require 'test/unit'

class Sample
  def hello
    'Hello, world!'
  end
end

class TestSample < Test::Unit::TestCase
  # assert_equalを使ってみた
  def test_hello
    assert_equal 'Hello, world!', Sample.new.hello
  end

  # assert_trueを使ってみた
  def test_hello_true
    assert_true('Hello, world!' == Sample.new.hello)
  end
end

以下の出力結果はわざと警告が出るように、helloクラスの'Hello, world!'コメントアウトしました。

sample.rb:12:in `test_hello'
<"Hello, world!"> expected but was
<nil>

diff:
? "Hello, world!"
? ni             
Failure: test_hello(TestSample)

すると、assert_equalの場合はこのような警告だったのに対し、assert_tureの場合は、以下のようにfalseであることしか示しませんでした。

Failure: test_hello_true(TestSample):
  <true> expected but was
  <false>

つまり、同じ表現でも何がダメなのかをしっかり出力してもらわなければ困るときは、assert_equalの方が良いということが分かりました。

このように、テストを書く上で何を出力するのかで、テストの書き方を工夫する必要があることが学べました。