ロジックを正しく実装した後でもテストが失敗する場合(テストに間違いがあるため)、TDDでの最善のアクションは何ですか?
たとえば、次の関数を開発するとします。
int add(int a, int b) {
return a + b;
}
次の手順で開発するとします。
テストの書き込み(まだ機能なし):
// test1 Assert.assertEquals(5, add(2, 3));
コンパイルエラーが発生します。
ダミー関数の実装を作成します。
int add(int a, int b) { return 5; }
結果:
test1
合格。別のテストケースを追加します。
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
結果:
test2
失敗しますが、test1
成功します。実際の実装を書く:
int add(int a, int b) { return a + b; }
結果:
test1
まだ合格、test2
まだ失敗(以降11 != 12
)。
この特定のケースでは:
- 訂正し
test2
、そしてそれが今渡していることがわかり、または - 実装の新しい部分を削除し(つまり、上記の手順2に戻って)、修正
test2
して失敗させてから、正しい実装を再度導入します(上記の手順4)。
または、他の巧妙な方法がありますか?
例の問題はかなり些細なものであることは理解していますが、2つの数字を追加するよりも複雑になる可能性のある一般的なケースで何をすべきか興味があります。
編集(@Thomas Junkの回答に応じて):
この質問の焦点は、そのような場合にTDDが示唆することであり、優れたコードまたはテスト(TDDの方法とは異なる場合があります)を達成するための「普遍的なベストプラクティス」ではありません。