TDDの目標
- 動作する
- きれいな
ここでは、動作→きれいな
逆はアーキテクチャ駆動と言っている
id:t-wadaさんの話だと、どちらからでもよい
とにかくはやくグリーンにしたい
リズムが重要
Dollarオブジェクトが変化する
こんなテストを用意
package star.Test; import star.Dollar; import junit.framework.TestCase; public class DollarTest extends TestCase { public void testMultiplication() { Dollar five = new Dollar(5); five.times(2); assertEquals(10, five.amount); five.times(3); assertEquals(15, five.amount); } }
timesメソッドが新しいオブジェクトを返してあげればよい
Dollarオブジェクトのインターフェースを変更
>このことをオブジェクトの退化っていってるのかな?
正しいインターフェースについての推測は、正しい実装についての推測と同様に完全でない
>インターフェースを決めても揺らぐことはあるよってことだね。
まず、テストクラスを変更
public class DollarTest extends TestCase { public void testMultiplication() { Dollar five = new Dollar(5); Dollar dollar = five.times(2); assertEquals(10, dollar.amount); dollar = five.times(3); assertEquals(15, dollar.amount); } }
timesメソッドの仕様が変更されたので、ターゲットクラスも変更
public Dollar times(int multiplier) { return new Dollar(amount*multiplier); }
ここまでで、TDDの戦略3つのうちの2つ
- 仮実装
- 明白な実装
普段はこの二つを使って行う。
これが、リファクタの階段?
- 飛ばしたり
- 慎重になったり
TDD共通のテーマ
- 感情をテストにする
- コードに対する不快感、不安感をテストケースの量に変化
読み返してみると、ほんとさらっと重要なことを書いてるな。