#201024 Today's Moku-Moku by Fujita 今日の始まり
https://gyazo.com/505e82b7155a98bbeb1bea2a79e7fd4b
今日はp.29から!
原則をあえて破るとき
Francのテストを書いてみよう
DollarのテストをコピーしてFrancに書き換えた
これで唾棄すべき糞コードの出来上がりだとあざ笑う声が聞こえてくる
code:MoneyTest.cs
public void Franc5に2をかけたらFranc10を返す()
{
Dollar five = new Franc(5);
Assert.Equal(new Franc(10), five.Times(2));
Assert.Equal(new Franc(15), five.Times(3));
}
イラッとしただろうか。なら深呼吸だ。
code:tdd-fase.txt
1. テストを書く
2. コンパイラを通す
3. テストを走らせ、失敗を確認する
4. テストを通す
5. 重複を排除する
最初の3つのフェーズはなるべく速く通過して、新しい機能がどの状態にあるのかわかるところまで行きたい。
そこにたどり着くためには、どのような罪を犯しても良い。
その短い時間だけは、速度が設計よりも重要だからだ。
ただし、良い設計の原則を無視しても良いという意味ではない。
正しい設計を、正しいタイミングで行う。動かしてから、正しくする。
Francの実装コードを実装した
さて、重複が大量に発生したので、次にテストに進む前に重複を排除しなければならない
code:Franc.cs
public class Franc
{
private int amount;
public Franc(int amount)
{
this.amount = amount;
}
public Franc Times(int multiplier)
{
return new Franc(amount * multiplier);
}
public override bool Equals(object obj)
{
Franc franc = (Franc)obj;
return amount == franc.amount;
}
}
まずは、equalsメソッドの一般化から始めよう。
だがその前に、TODOリストを1つ「済」にして、3つ項目を追加する
https://gyazo.com/6b0d1eee39af7c0ac26f55d04d9d6afc
ふりかえり
大きいテストに立ち向かうにはまだ早かったので、次の一歩を進めるために小さなテストをひねり出した
恥知らずにも既存のテストをコピー&ペーストして、テストを作成した
さらに恥知らずにも、既存のモデルコードを丸ごとコピー&ペーストして、テストを通した
この重複を排除するまでは家に帰らないと心に決めた
ベロシティ:29 - 34. 5ページ