質問: テスト駆動開発(Test Driven Development, 以下 TDD)において、作成したテストコードの妥当性を検証するテストコードを更に用意する必要があるのではないでしょうか? 私はその様に認識しているのですが、正しいのでしょうか? 正しいとして、TDD を実践している方々はやはりテストのテストを書いていたりするのでしょうか? それとも、テストのテストを書かなくても済ませられる方法があるのでしょうか? ご回答いただければ幸いです。
回答: `TDD`はテストのためのテクニックではなく**開発のためのテクニック**です。 クラスなどの小さな部品を実装する際に、そのAPI(publicメソッドなど)を呼び出す簡易的なテストコードをあらかじめ書いておき、そこから実際に対象クラスを実装していきます。 そうすることで、本当に欲しい部品を設計しながら実装することができます。もちろん、簡単なバグを見つけ出すのにも役に立ちますが、テストケースの網羅はしません。 その際に、テストコードは呼び出したメソッドの戻り値がなんであるかを簡単なアサーション(等しいかどうか、大小、nullかどうかなど単純な真偽チェックが多い)を用いてチェックすることが多いです。テスト側でロジックを持たせるわけではないので、テスト側のテストは不要です。 逆にテスト側にロジックを書いている場合、それは何かがうまくいってないでしょう。 `TDD`の解説はWeb上にも数多くありますが、個人的には The RSpec Book(David Chelimsky Dave Astels Zach Dennis 株式会社クイープ 角谷信太郎 豊田祐司) | 翔泳社の本 が`TDD`や`BDD`(振舞駆動開発)などにについて書かれていて良いと思いました。