Skip to content

Instantly share code, notes, and snippets.

@yimajo
Last active April 27, 2019 16:25
Show Gist options
  • Save yimajo/b1e6b6fea366a08b393f30b91f0fa369 to your computer and use it in GitHub Desktop.
Save yimajo/b1e6b6fea366a08b393f30b91f0fa369 to your computer and use it in GitHub Desktop.
テスト駆動開発 読書録

前提

テスト駆動開発 読書録

ch1. 仮実装

  • どのようなクラスから始めるかではなくテストから始める
  • テストを始める
    • 最初は雑でいい
      • クラスの実装がなくても利用例から書けばいい
        • Dollerクラス
      • 金額なのにIntでやってもいい
      • 副作用があってもいい
  • テストの進め方
    • TODOリストを作って書いていく
    • コンパイルエラーを消していく
  • サイクル
    • 小さいテストを書く
    • テストを実行し失敗させる
  • 内部を実装せず利用例だけを書く
    • 仮実装

ch2. 明白な実装

  • 仮実装と明白な実装を揺れ動く
    • とりあえずコンパイルを通す空実装
  • テストを繰り返し副作用を取り除く改善
    • (ここでの副作用とはイミュータブルなオブジェクト)
      • 戻り値を返すようにし状態を変更しないようにした
        • テストによって改善していく
  • 振る舞いが決まれば
    • フワフワとした議論ではなく実例に伴った議論ができる

ch3. 三角測量

  • DollerオブジェクトはValue Objectパターン
    • VOパターンを使うメリットは
      • 一度作成したオブジェクトは変わらない
        • 別名参照問題
    • VOとして
      • equalsメソッドを実装し他のVOと比較できるようにする
        • 5ドルは5ドルである必要がある
          • テストで検証しそれを実装した

ch4. 意図を語るテスト

  • 一時変数を使わなくていいなら使わない
    • assertにインライン化してしまえる
      • 操作の連なりではなく真理の証明
        • assertEquals(new Dollar(10), five.times(2));

ch5. 原則をあえて破るとき

  • DollerからFrancを作る
    • Dollerをコピペ、テストもコピペする
      • テストを通す

ch6. テスト不足に気づいたら

  • 米国の作家ウォーレス・ステグナーの著作「Crossing To Safety」で泣いた
    • その一節: 何も作らないが準備することこそ彼の人生
      • (どういうこと?)
        • ch5 で準備に時間をかけずにテスト通したよね?
          • (準備に時間をかけて何もやらないのではなくとにかくやるということ?)
            • (直接そう説明すればいいのに回りくどすぎるやろw)
  • Dollerを継承してFrancを作る
    • コードの削減にはつながらなかった
  • Moneyを作ってDoller/Francで継承
    • この案は非常にうまくいく
      • extendsしただけだとテストは通る
      • Dollerのequalsメソッドを消し親のMoneyに任す
        • Francのequalsメソッドを消すときにテスト書いてなかった
          • テストを書いておく
          • Francのequalsメソッド消す
            • Moneyと同じになる
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment