最近、社内でモブプロの交流会等で、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とかBDD系は「What」に軸をおいたテストなんじゃないかなぁと。
それこそ「振る舞い」なのだから、実現したい「こと」にフォーカスしてるというイメージ。
Howをテストしたい
んで、自分がテストを書く時何を考えているかというと、どちらかといえば 「How」じゃないかなぁと。
もちろんゴールは「What」なんだけど、その実現したいことを「この方法でうまくいくかなぁ」とか「この書き方はどうだろうか」とか設計も含めた実現する手段の整理もしている気がする。
するとテストコードというと僕は(とりわけTDDやるときのような)UnitTestをイメージしてるんだなってことに気付く。
まとめ
UnitTestを書く時はプロダクションコードもセットで考える(Howを考える)ので、Howにフォーカスしやすいテストコードを書きたくなるんだと思う。
んで、RSpecはWhatにフォーカスしている(ように感じた)から、MiniTestの方が好きな感じがしたのかもしれない。
なんだか、各方面に叩かれそうだな。。
いい悪いの話ではなく、好き嫌いの話なのでご容赦ください。