質問: 下記のようにソースを修正した場合、単体テストでどのようなテストケースが必要になりますか? 下記のようなケースを考えたのですが、ケース3、4は必要ですか?処理Dはインデントしているだけなのでテストの必要ないようにも感じます・・・。 また、これ以外にも実施するべきテストケースはありますか? ケース1 条件1のみ成り立つとき、処理Aが実行されること ケース2 条件1,2が成り立つとき、処理B,Cが実行されること ケース3 条件1,2が成り立ち、処理Cが正常終了時に処理Dが実行されること ケース4 条件1,2が成り立ち、処理Cが正常終了時に処理Dが実行されないこと ケース5 条件1が成り立たない場合 ■修正前 ``` if (条件1 AND 条件2) { 処理A 処理B 処理C if (処理Cが正常終了) { 処理D } } ``` ■修正後 ``` if (条件1) { 処理A if (条件2) { 処理B 処理C if (処理Cが正常終了) { 処理D } } } ```
回答: テスト仕様レビューですか。 私がレビューアならリジェクトです。 * 条件網羅テスト。条件1と条件2の真偽が網羅されていない 真偽値表を書いて、どの条件の組み合わせのときにどの処理が実行されるのを期待するのか、明確にすること。 | 条件1 | 条件2 | 期待する処理内容 | | --- | --- | --- | | false | false | 何もしない | | false | true | 何もしない | | true | false | 処理Aのみ実行され、B,C,Dは実行されない | | true | true | 処理A、処理B、処理Cが実行される | こんな感じで。 このケースだとfalse-trueが抜けやすい、現にあなたも抜けてる。 * 条件1と条件2は処理C,Dと完全に独立していて、かつC、Dの処理内容に修正がないなら、処理Cが正常終了したら処理D、のテストはスキップしていいかもしれない。 ただしケース34を実施しなくていいという話ではなく、上の真偽値表に書いた期待する処理内容はテストする必要があります。あくまでCの成否にかかる分岐処理だけの話。 インデントしてるだけとか、そういう理由でテストをカットすることはありません。 (まあインデントやifのカッコが正しく記載されているかどうかはコードレビューの範疇の気がしますが。) 実際のレビュー時なら、レビューイに本当に条件1,2と処理C,Dが独立しているか聞きます。 明確に答えられなかったらきちんと処理内容を把握してないということなので、処理内容を理解するように促して一旦突っ返します。 質問文から読み取れる内容は以上かな。