write ahead log

ロールフォワード用

Test::Unitでテスト群の最初と最後にだけメソッドを呼びたい

あんまりよろしくないやり方な気がするけど, 便利な時には便利なので.

標準で用意されているsetupteardownは各テストケースの呼び出し前後に呼び出される.

require 'test/unit'

class TestSample < Test::Unit::TestCase
  def setup
    puts "setup"
  end

  def teardown
    puts "teardown"
  end

  def test_foo
    puts "foo"
  end

  def test_bar
    puts "bar"
  end
end
$ ruby sample.rb
Loaded suite sample
Started
setup    [準備して]
bar
teardown [片付ける]
.setup   [準備して]
foo
teardown [片付ける]
.

Finished in 0.0010129 seconds.
----------------------------------------------------------------------------------------------------
2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
----------------------------------------------------------------------------------------------------
1974.53 tests/s, 0.00 assertions/s

普通はこれで何の問題もない.

なんだけど, たまーにテストケース全体の最初と最後だけに呼び出したい事がある.

$ ruby sample.rb
Loaded suite sample
Started
setup     [最初に準備して]
bar
.foo
.teardown [最後に片付ける]


Finished in 0.0009669 seconds.
----------------------------------------------------------------------------------------------------
2 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
----------------------------------------------------------------------------------------------------
2068.47 tests/s, 0.00 assertions/s

強引だなぁとは思うけど, TestUnitが最初と最後に呼ぶstartupshutdownを特異クラスでオーバーライドしてやればできるらしい.

require 'test/unit'

class TestSample < Test::Unit::TestCase
  class << self
    def startup
      puts "setup"
    end

    def shutdown
      puts "teardown"
    end
  end

  def test_foo
    puts "foo"
  end

  def test_bar
    puts "bar"
  end
end

まぁ, 原則やるなってことだよね, これ.

便利な時は便利なんだけどなぁ.