Hatena::Grouphackathon

zrail (a.k.a. tobira17, h14i, ...) の Learning Log

2011-11-19

[][]MiniTest::Spec は MiniTest::Unit::TestCase も継承している 07:40 MiniTest::Spec は MiniTest::Unit::TestCase も継承している - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - MiniTest::Spec は MiniTest::Unit::TestCase も継承している - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

久しぶりに Ruby の minitest/spec を読んでいてタイトルのことを気付いた。

また同じく minitest/spec にコメントで書いてあるけど、

class MySpec < MiniTest::Spec
  # ... shared code ...
end

class TestStuff < MySpec
  it "does stuff" do
    # shared code available here
  end
  describe "inner stuff" do
    it "still does stuff" do
      # ...and here
    end
  end
end

という書き方ができるようだ。いや考えてみれば当然だけど。

だから「 test/unit 2.x 系はテストメソッド名が文字列リテラルで書けてカッコ良さげだけど、標準添付の test/unit は 1.x 系だから残念だなぁ」という場合に良いかも。

class MyTest < MiniTest::Unit::TestCase # 長い!
  def test_sample_case
    # ...
  end
end

class MyTest2 < MiniTest::Spec # 少し短くなった
  it "is sample case" do
    # class を使ってテストクラスを定義してるけど it が使える
  end

  def test_sample_case
    # 当然 def を使った xUnit 的な書き方もできる
  end
end

話が前後するけど、一番最初の例のように、 MiniTest::Spec を継承したカスタムクラスを作ってその中でヘルパーメソッドを作るとテストクラスがごちゃごちゃしないのかも。


とか考えたけど、なんか違う気がする。あんまり嬉しくないし。