5章 「フランク」に話す

久しぶりだなぁw)


最初のTodoに対してのテスト

  • レートが2:1の場合、$5+10CHF = $10


急激に飛躍のあるテストに思える


必要なもの

  • Dollarのように振舞えるオブジェクトだけど、フラン通貨を表現できるオブジェクト

フランオブジェクトが正しく動作するためのTodoリスト、テストを追加

5 CHF * 2 = 10 CHF

テストをDollarテストをコピーして、DollarTest.javaに追加

public void testFrancMultiplication() {
 Franc five = new Franc(5);
 assertEquals(new Franc(10), five.times(2)); 
 assertEquals(new Franc(15), five.times(3));
}

どのようにグリーンにするか?

  • もっとも小さい手順はDollarコードをコピーして、Francに置き換え


コピーはいいのか?


もう一度TDDのサイクルについて

  1. テストを作成
  2. コンパイルできるようにする
  3. 実行して、失敗を確認
  4. 動作させる
  5. 重複を取り除く

5つの各フェーズには異なる目的、解決策、美的視点が必要


3つまでは、短い期間にする必要がある

  • 新しい機能を既知の状態にするため
  • その間はどんな罪も許される
  • 罪=コピーアンドペースト
  • この間だけ速度が設計を勝る


この罪が許されるのは、4,5フェーズがあってこそ。


クラスFrancを作成

package star;
public class Franc {
 public int amount;
 public Franc(int amount) {
  this.amount = amount;
 }
 public Franc times(int multiplier) {
  return new Franc(amount * multiplier);
 }
 public boolean equals(Object object){
  Franc franc = (Franc)object;
  return amount == franc.amount;
 }
}

グリーンになることを確認
まずは、フランオブジェクトの正しく動作することを確認

  • 5CHF *2 =10CHFにチェック

あらたに3つのTodo

  • DollarとFrancの重複
  • equals()の一般化
  • times()の一般化


意外とすんなり、分かりやすい。
少しずつ近づいてる感じがあるなぁ。次は一般化と。