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 を継承したカスタムクラスを作ってその中でヘルパーメソッドを作るとテストクラスがごちゃごちゃしないのかも。


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

[][]assert_* と must_* の対応とか 08:43 assert_* と must_* の対応とか - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - assert_* と must_* の対応とか - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

assertion を使いこなせていないというか、どういうのがあったか忘れてしまうのでメモ。

ちなみに、 must_* や wont_* は MiniTest::Expectations の中で Module#infect_an_assertion を使って、元の assert_* や refute_* に別名を与えて作ってるみたい。

AssertionsSpec意味
assert_emptymust_be_empty空ならパス
assert_equalmust_equal同値ならパス
assert_in_deltamust_be_close_to(alias must_be_within_delta)絶対誤差が許容範囲ならパス
assert_in_epsilonmust_be_within_epsilon相対誤差が許容範囲ならパス
assert_includesmust_includeコレクションに含まれていればパス
assert_instance_ofmust_be_instance_ofクラスの直接のインスタンスならパス
assert_kind_ofmust_be_kind_ofサブクラスも含むクラスのインスタンスならパス
assert_matchmust_match正規表現にマッチすればパス
assert_nilmust_be_nilオブジェクトが nil ならパス
assert_operatormust_be評価結果が true ならパス
assert_raisesmust_raise指定した例外が発生したらパス
assert_respond_tomust_respond_to指定したメソッドを持っていればパス
assert_samemust_be_same_asobject_id が等しければパス
assert_sendmust_send評価結果が true ならパス
assert_throwsmust_throw指定した tag が throw されたらパス
assert_outputない?与えられた stdout または stderr が出力されればパス
assert_silentない?与えられた stdout または stderr が出力されなければパス
refute_emptywont_be_emptyここから下は true なら Failure
refute_equalwont_equal
refute_in_deltawont_be_within_delta(alias wont_be_close_to)
refute_in_epsilonwont_be_within_epsilon
refute_includeswont_include
refute_instance_ofwont_be_instance_of
refute_kind_ofwont_be_kind_of
refute_matchwont_match
refute_nilwont_be_nil
refute_operatorwont_be
refute_respond_towont_respond_to
refute_samewont_be_same_as

関連ページ