テストコードのテスト

テスト駆動開発(TDD)だのテストファーストだので、昨今はテストを自動化していく習慣が浸透していっているように見受けられますが、その際に「テストコードのテストはどうすんのよ?」的な話題までは出ても「テストコードもテストを必ずやらなければならない」と言うことが意外と言及されてるのを見かけないので、あえて言及してみる。

  • 「テストコードのテストはやらなければならないか?」という問いに対する答えは間違いなく「やらなければならない」です。当たり前の話ですが、テストコードが正しく機能していることがなんらかの形で担保されていなければ、自動テストを全てパスしたコードが、実はテストコードがまともに機能していなかっただけで全然ダメダメなコードだったなんて事態を招きかねません。なお、このテストコードのテストが MUST なのはテストに失敗していることを検出できることについてのみであり、成功している場合に正しくそれを認識できるかについてはテストしておいたほうがいいでしょうが MUST ではないと考えます。これはテストコードが成功を正しく認識できない場合については自動テストをパスできないことで比較的簡単に発覚する為です。
  • 「いつテストコードのテストをやらなければならないか?」という問いに対しては通常のテストと同じくテストコードを作成・編集する度にそのテストを行う必要があると考えます。
  • 「テストコードのテストコード*1を作成しなければならないか?」という問いに対しては「ケースバイケース」だと考えます。基本的にテストコードのテストはマニュアル的なやり方で十分だと考えますが、そのテスト内容によってはどうしてもテストコードのテストコードを作成せざるをえない場面というのが考えられます。また、この「テストコードのテストコード」については通常の「テストコード」と同じようにテストを実施する必要があると考えます。(最悪はテストコードのテストコードのテストコードのテストコード...といった連鎖が起こる。)

追記

なぜかこの記事が反映されていないRSSがある(こことか)。なんでだろ?

*1:ここで言う「テストコードのテストコード」はマニュアル的なやり方で済むケースでも多くの場合必要となる単純なスタブコード及びドライバコードに収まらないものを指します。