久しぶりだなぁ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のサイクルについて
- テストを作成
- コンパイルできるようにする
- 実行して、失敗を確認
- 動作させる
- 重複を取り除く
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()の一般化
意外とすんなり、分かりやすい。
少しずつ近づいてる感じがあるなぁ。次は一般化と。