TDD1周目(TDD Boot Camp 2020 Online #1)
プログラミング1周目は何もないので重い(設計の色合いが濃い)。小さいものを選ぶ
設計と、テストのテストにフォーカスした
今回は名前空間の設計はスキップ
テスト対象とテストファイルは1:1(機械も進歩してまとめる制約はない。1:1だと人に分かりやすい)
絶対に失敗するテストができている(1:01:50くらい)
文字列を変えて流す。レッドバーを見る
スタートラインに立てていることを確認
予想通りの失敗の仕方をした(TDDで頻出)
1つのテストメソッドの中の構造は、準備・実行・検証 + 後片付け
arrange - act - assert (3A)
given - when - then
テスト駆動開発では下から、検証 -> 実行 -> 準備 の順で書く
テストのゴールは検証。ゴールから書く
検証:テスト対象の返した値(actual)が期待値(expected)と一致するか
期待値から書く(=ゴールから書く)
ここで手が止まる。expectedとは
できた気になっていたが、できていないと現実を突きつけられた
先にわかるほどプロジェクトにはよい
具体的な仕様を書く
1を渡すと文字列1を返す
詰まったら具体的にはと考える(抽象度の行き来)
コンパイルエラーがあるのでテストが失敗する
Redに数える(1:13:50)
動的であれ静的であれ目の前のものがうまくいっていないのがRed
actual、テスト対象が戻してくる値。対象のコード(存在していない)を使う
作る前に使う。利用者側の視点から考えられる
使い手として自分がどう使いたいか(作り手の立場でない!)
fizzbuzzインスタンスのconvertメソッドを呼び出したい
fizzbuzzインスタンスはFizzBuzzクラスのインスタンス
(コンパイルエラーがあるので)IDEでクラスを作る
convertメソッドがないので(IDEを使って)作る
return null
テスト失敗:1を期待しているが、nullが返ってきた
モードチェンジして、テストを通す実装する
最小限のコード、最短時間でテストを通す
固定値を返した
最小限のコードでテストが失敗したら、テスト側の問題と分かる
return "1"は処理系。処理系を疑うより前に自分の書いたテストコードを疑う
テストコードのバグに気付きたい(テストコードにテストコードを書くのではなく)
テストコードのテストのテクニック defect insertion(mutation testing)1:23:20
最小限のコードでテストコードのテストを早期にしている:仮実装
リファクタリングは実装コードから