- テスト駆動開発 の感想
()
は感想
- どのようなクラスから始めるかではなくテストから始める
- テストを始める
- 最初は雑でいい
- クラスの実装がなくても利用例から書けばいい
- Dollerクラス
- 金額なのにIntでやってもいい
- 副作用があってもいい
- クラスの実装がなくても利用例から書けばいい
- 最初は雑でいい
- テストの進め方
- TODOリストを作って書いていく
- コンパイルエラーを消していく
- サイクル
- 小さいテストを書く
- テストを実行し失敗させる
- 内部を実装せず利用例だけを書く
- 仮実装
- 仮実装と明白な実装を揺れ動く
- とりあえずコンパイルを通す空実装
- テストを繰り返し副作用を取り除く改善
- (ここでの副作用とはイミュータブルなオブジェクト)
- 戻り値を返すようにし状態を変更しないようにした
- テストによって改善していく
- 戻り値を返すようにし状態を変更しないようにした
- (ここでの副作用とはイミュータブルなオブジェクト)
- 振る舞いが決まれば
- フワフワとした議論ではなく実例に伴った議論ができる
- DollerオブジェクトはValue Objectパターン
- VOパターンを使うメリットは
- 一度作成したオブジェクトは変わらない
- 別名参照問題
- 一度作成したオブジェクトは変わらない
- VOとして
- equalsメソッドを実装し他のVOと比較できるようにする
- 5ドルは5ドルである必要がある
- テストで検証しそれを実装した
- 5ドルは5ドルである必要がある
- equalsメソッドを実装し他のVOと比較できるようにする
- VOパターンを使うメリットは
- 一時変数を使わなくていいなら使わない
- assertにインライン化してしまえる
- 操作の連なりではなく真理の証明
assertEquals(new Dollar(10), five.times(2));
- 操作の連なりではなく真理の証明
- assertにインライン化してしまえる
- DollerからFrancを作る
- Dollerをコピペ、テストもコピペする
- テストを通す
- Dollerをコピペ、テストもコピペする
- 米国の作家ウォーレス・ステグナーの著作「Crossing To Safety」で泣いた
- その一節: 何も作らないが準備することこそ彼の人生
- (どういうこと?)
- ch5 で準備に時間をかけずにテスト通したよね?
- (準備に時間をかけて何もやらないのではなくとにかくやるということ?)
- (直接そう説明すればいいのに回りくどすぎるやろw)
- (準備に時間をかけて何もやらないのではなくとにかくやるということ?)
- ch5 で準備に時間をかけずにテスト通したよね?
- (どういうこと?)
- その一節: 何も作らないが準備することこそ彼の人生
- Dollerを継承してFrancを作る
- コードの削減にはつながらなかった
- Moneyを作ってDoller/Francで継承
- この案は非常にうまくいく
- extendsしただけだとテストは通る
- Dollerのequalsメソッドを消し親のMoneyに任す
- Francのequalsメソッドを消すときにテスト書いてなかった
- テストを書いておく
- Francのequalsメソッド消す
- Moneyと同じになる
- Francのequalsメソッドを消すときにテスト書いてなかった
- この案は非常にうまくいく