RSpecよりMiniTestの方が好きだと思ったのはなんでか考えてみた

最近、社内でモブプロの交流会等で、RSpecとMiniTest両方を触る機会があった。

どちらもガッツリ触ったわけではないのだけれど、直感的にMiniTestの方が好きだなぁと感じて、なんでかなぁって考えてみた。

RSpecはこんな感じ。

RSpec.describe Order do
  it "sums the prices of its line items" do
    order = Order.new

    order.add_entry(LineItem.new(:item => Item.new(
      :price => Money.new(1.11, :USD)
    )))
    order.add_entry(LineItem.new(:item => Item.new(
      :price => Money.new(2.22, :USD),
      :quantity => 2
    )))

    expect(order.total).to eq(Money.new(5.55, :USD))
  end
end

MiniTestはこんな感じ。

class TestMeme < MiniTest::Unit::TestCase
  def setup
    @meme = Meme.new
  end

  def test_that_kitty_can_eat
    assert_equal "OHAI!", @meme.i_can_has_cheezburger?
  end

  def test_that_it_will_not_blend
    refute_match /^no/i, @meme.will_it_blend?
  end

  def test_that_will_be_skipped
    skip "test this later"
  end
end

パッと見た感じだと、RSpecの方がテストしたいことが分かりやすい気はする。

構文とか覚えるコストはMiniTestの方が低そう。

ただどちらにせよ、好き嫌いの判断に大きな影響を与えていない気がする。

テストコードで知ってるの並べてみる

  • 好き
  • 嫌いではない
  • そんなに好きじゃない

触った程度しかないものもあるけど、並べてみる。

BDD系があんまり好きでなくてxUnit系が好きなのかな。

大好きなSpockはBDDなのかはよく分からないw

ただRSpecにインスパイアされたみたい*1ではある。

掘り下げてみる

もう少し自分の考えを深掘りしてみたら、なんとなく思った。

RSpecとかBDD系は「What」に軸をおいたテストなんじゃないかなぁと。

それこそ「振る舞い」なのだから、実現したい「こと」にフォーカスしてるというイメージ。

Howをテストしたい

んで、自分がテストを書く時何を考えているかというと、どちらかといえば 「How」じゃないかなぁと。

もちろんゴールは「What」なんだけど、その実現したいことを「この方法でうまくいくかなぁ」とか「この書き方はどうだろうか」とか設計も含めた実現する手段の整理もしている気がする。

するとテストコードというと僕は(とりわけTDDやるときのような)UnitTestをイメージしてるんだなってことに気付く。

まとめ

UnitTestを書く時はプロダクションコードもセットで考える(Howを考える)ので、Howにフォーカスしやすいテストコードを書きたくなるんだと思う。

んで、RSpecはWhatにフォーカスしている(ように感じた)から、MiniTestの方が好きな感じがしたのかもしれない。

なんだか、各方面に叩かれそうだな。。

いい悪いの話ではなく、好き嫌いの話なのでご容赦ください。