[tddjs]chap01 自動テスト

単体テスト

  • 単体テストは、対象を明確に書く(単体テストを書いているつもりで、統合テストを書いているときがある)
    • パブリックなメソッドに対する振る舞いのテストになっているか?

単体テストの利点

  • 単体テストは投資
    • 書かないことで時間を節約できる? → 単体テストを書かない != テストをしない
    • 単体テストを書かないなら、手作業でテストをすることになり効率が悪い
  • かつてのバグが再発していないか退行テストをする
  • リファクタリングのために
    • ヘルパ関数にパブリックなメソッドからコードを切り出してきたとき、ちゃんとローカル変数とか適合するよう直しているか?
    • 元のコードの振る舞いがかわっていないかテストするため、メソッドに対しテストを書いておく
  • ブラウザでひらくだけでテストできるので、クロスブラウザテストが楽になる(テストする気になれる)
  • ドキュメントとして
    • よく書かれたテストは、コードのインタフェースの例になる
    • 自分でインタフェースを使うことになるので、頻繁にフィードバックを得ることになる → 設計としてつかえる

単体テストの罠

  • 単体テストのベストプラクティスに従って書かれていなければ、上記のメリットを得られない
    • こう書かれてるはず、という想定で読んだらよくわからないテスト書かれてて読めない、とか?
    • テスト対象を適切に書いていないと(テストの範囲が大きいとか)、何が原因でテストが失敗しているかわからない、とか?
  • テストしやすいコード(結合度が低いなど)じゃないと、つらい
    • テストを意識していないと、インタフェースやスコープなどがテストしにくい感じで書かれてて、テスト書くのがつらくなる