2012-01-02 [tddjs]chap01 自動テスト 単体テスト 単体テストは、対象を明確に書く(単体テストを書いているつもりで、統合テストを書いているときがある) パブリックなメソッドに対する振る舞いのテストになっているか? 単体テストの利点 単体テストは投資 書かないことで時間を節約できる? → 単体テストを書かない != テストをしない 単体テストを書かないなら、手作業でテストをすることになり効率が悪い かつてのバグが再発していないか退行テストをする リファクタリングのために ヘルパ関数にパブリックなメソッドからコードを切り出してきたとき、ちゃんとローカル変数とか適合するよう直しているか? 元のコードの振る舞いがかわっていないかテストするため、メソッドに対しテストを書いておく ブラウザでひらくだけでテストできるので、クロスブラウザテストが楽になる(テストする気になれる) ドキュメントとして よく書かれたテストは、コードのインタフェースの例になる 自分でインタフェースを使うことになるので、頻繁にフィードバックを得ることになる → 設計としてつかえる 単体テストの罠 単体テストのベストプラクティスに従って書かれていなければ、上記のメリットを得られない こう書かれてるはず、という想定で読んだらよくわからないテスト書かれてて読めない、とか? テスト対象を適切に書いていないと(テストの範囲が大きいとか)、何が原因でテストが失敗しているかわからない、とか? テストしやすいコード(結合度が低いなど)じゃないと、つらい テストを意識していないと、インタフェースやスコープなどがテストしにくい感じで書かれてて、テスト書くのがつらくなる 写経したやつ https://github.com/moja8/tddjs-syakyo/tree/master/chap01