ume

Rspec テストケースについて(Ruby)

前書き

例えば以下のような合計料金を計算するメソッドをテストする場合.

def calc_total_price(price)
  price * 税率
end 
  • 引数(price)に整数値が渡された場合のみテストするの?

  • とても大きい整数のテストする?

  • 文字列で渡された時もテストする?

と上記のようにどこまでテストをすべきかわからなかったので、今回はどこまでテストするかの基準を明確にしていきたいと思います。

結論

⇨どういう仕様なのか前提条件を明確にし、その後2つのテストアプローチから選択してテストする.

例 前提条件.
①priceは1~1000までの整数しか渡ることがない.

②料金に関する部分の処理だからテストはしっかりとしたい。


前提条件が決まれば以下の2つのテスト設計アプローチ(どちらか両方か)でテストを書く.

①契約によるテスト.
⇨前提条件の範囲内だけで行うテスト ここでいう(1~1000)までのテスト.

②防御的テスト ⇨事前条件の範囲外のテストを行なってちゃんとエラーになるかテストをする.

①と②どちらを使うのかは要件による。 そんなに重要ではないと思ったら①だけで行こうや、この処理はプログラム全体で重要だから①と②両方のテスト仕様などケースバイケースでテストする。

まとめ

  • テストする部分にどのようなテストをするかに正解はない.

  • 大事なのは前提条件をしっかりと設定することで自信を持ってテストをかける。