test/unit でテスト全体の setup と teardown

本格的に Ruby 1.9.1 に移行してみようと、仕事で使ってるユニットテストを動かしてみた。

test/unit を素直に使うと、勝手にテストが実行される。*1

これだと、テスト全体の前処理, 後処理を実装できない。


Ruby1.8.x の頃は、

  • TestSuite を作って、
  • TestSuite に fixture を追加して、
  • テスト全体の前処理をした後、
  • TestRunner.run して、
  • 最後にテスト全体の後処理をしていた。

ところが Ruby1.9.1 には TestRunner が存在しない。*2
焦った。

どうやら 1.9.1 では minitest/unit なるものを使ってるらしい。

いろいろやってみた結果、

# require 'test/unit'  # これだと勝手に実行されてしまう
require 'minitest/unit'
require 'test/unit/testcase'

class TestFoo <Test::Unit::TestCase
    # テストを書く
end

# ここでテスト全体の前処理

err = MiniTest::Unit.new.run(ARGV)  # これで実行
exit false  if err && err != 0

# ここでテスト全体の後処理

これでいいみたい。

前より簡単になった。

*1:Kernel.at_exit から実行する。

*2:この辺は「るりま」も未完成っぽい。