テストケースの二つの書き方

JUnitやTest::Unitといったテストファーストでプログラミングする際にメソッドベースでテストしていく方法は知っていたが、シナリオベースでテストするというのは初めて聞いたので書いておく。

その説明は、故masarlさんのJUnit 実践講座 - シナリオベースのテストケースの書き方に詳しい。

メソッドベース
テストするクラスに methodA, methodB という 2つのメソッドがあれば,テストクラスに testMethodA, testMethodB というテストメソッドを用意する.このように,テストするクラスのメソッドをもとにテストメソッドを起こしていく方法.
シナリオベース
テストするクラスの使い方として scenarioA, scenarioB という 2つのシナリオがあれば,テストクラスに testScenarioA, testScenarioB というテストメソッドを用意する.このように,テストするクラスのシナリオをもとにテストメソッドを起こしていく方法.

From: http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/junit/scenario-based-testcase.html#%83%81%83\%83b%83h%83x%81[%83X%82%C6%83V%83i%83%8A%83I%83x%81[%83X

つまり、一般的なクラスの使い方(メソッドの組み合わせ方)をベースにテストする方法のようだ。

ただシナリオベースだけを前提にテストケースを書くと予想されなかった組み合わせのときのバグが検出できなかったり、どのメソッドにバグがあるのか特定しづらかったりするのでメソッドベースのテストも必要だろう*1

メソッドベースのテストの利点はテストケースの漏れがあるかないかの判断が若干つきやすいことにあるのではないだろうか?

*1:もちろんメソッドベースのテストだけで十分かといえばそうでもないのだけど。