ハイレベルテストケースとローレベルテストケース

リーダブルなテストコードについて考えよう - connpass というイベントに参加した

その発表でハイレベルテストケースとローレベルテストという言葉を初めて聞き、例えもすごくわかりやすかったので簡単にまとめる

テストコードにはテストの意図を込めよう #vstat - Speaker Deck

例えば以下のようなテストケースがある(例は上記スライドから引用し、コードはRSpecで書き直している)

context '青森県の場合' do
  it '送料が1000円' do
    # ...
  end
end

context '広島県の場合' do
  it '送料が510円'
end

このテストケースは何を確認したいかが不明瞭で、47都道府県すべてで確認する必要があるのか、そうではないのかがわからない

テストの作成者に聞いたらこれは実は地方ごとに送料が変わることを確認できればOKだった

そうなると、以下のように書けば意図が伝わる

context '東北地方の場合' do
  it '送料が1000円' do
    # ...
  end
end

context '中国地方の場合' do
  it '送料が510円'
end

この 東北地方の場合中国地方の場合 がハイレベルテストケース、青森県広島県 がローレベルテストケース にあたる

ハイレベルテストケースで書くことによって、もし統廃合で青森県がなくなっても、別の東北地方の県をテストすれば良いことがわかる

contextをローレベルテストケースで書いてないか、という視点は常に持っていきたい