テストのメッセージに入出力値を含めるかどうか

入出力値が含まれるように書くいいところは、

  • メッセージを省略しやすい。自然言語を書くのが冗長
  • 実際にコードがテストしていることだけがメッセージに出力される
  • 単純に想像しやすいパターンだと入出力値が書いてある方が分かりやすい場合がある

入出力値が含まれないように書くいいところは、

  • 自然言語で読むことができる
  • こういう類の値が来たときにこういう風になってほしいという意図が分かりやすい

数列を表すときの書き方に似てる。
F(0) = 0, F(1) = 1, F(n+2) = F(n) + F(n+1) (n >= 2)という実装をしたとき、{F(n)} = {0, 1, 1, 2, 3, 5, 8} と書くのか、{F(n)} = {最初の二項は0,1と定義され、以後どの項もその前の2つの項の和} と書くのか。

入出力値が含まれるように書くとこういう感じになる。

module ApplicationHelper
  def currentcssclasses
    %W[
      #{controllername}controller
      #{actionname}action
    ]
  end
end

describe ApplicationHelper do describe "#currentcssclasses" do context "called at SearchController#show" do before do helper.stub(:controllername).andreturn("search") helper.stub(:actionname).andreturn("show") end

  specify do
    helper.current_css_classes.should == %w[search_controller show_action]
  end
end

end end

ApplicationHelper
  #currentcssclasses
    called at SearchController#show
      should == ["searchcontroller", "showaction"]