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

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

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

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

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

数列を表すときの書き方に似てる。
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 current_css_classes
    %W[
      #{controller_name}_controller
      #{action_name}_action
    ]
  end
end

describe ApplicationHelper do
  describe "#current_css_classes" do
    context "called at SearchController#show" do
      before do
        helper.stub(:controller_name).and_return("search")
        helper.stub(:action_name).and_return("show")
      end

      specify do
        helper.current_css_classes.should == %w[search_controller show_action]
      end
    end
  end
end
ApplicationHelper
  #current_css_classes
    called at SearchController#show
      should == ["search_controller", "show_action"]