4章 プライベート化
等価性を定義したことで、テストが情報豊富になる?
timesメソッドをみる
Dollarオブジェクトを返しているので
テストのアサートを書き直す
public void testMultiplication() { Dollar five = new Dollar(5); Dollar dollar = five.times(2); assertEquals(new Dollar(10), dollar); dollar = five.times(3); assertEquals(15, dollar.amount); }
情報が豊富になった?2つ目のアサートも書き直す
いまいちつながらないです・・・
public void testMultiplication() { Dollar five = new Dollar(5); Dollar dollar = five.times(2); assertEquals(new Dollar(10), dollar); dollar = five.times(3); assertEquals(new Dollar(15), dollar); }
一時変数、dollarが役に立ってないので''インライン化''
Alt+Shift+Iでいきたいとこだけど、複数なので、ひとつずつ。
public void testMultiplication() { Dollar five = new Dollar(5); assertEquals(new Dollar(10), five.times(2)); assertEquals(new Dollar(15), five.times(3)); }
このテストは一連の操作ではない。
真のアサートであるかのように情報を明確につたえている
5のAオブジェクトをつくり、
10のBオブジェクトはAオブジェクトの2倍
15のCオブジェクトはAオブジェクトの3倍
うーん、明確には伝わるけど・・・きっかけに無理があるような・・・
これで、amountがプライベートにできることはわかる
ここからがわからない
- リスクを受け入れる
- TDDで管理するリスク
ひとつの式が確認できないなら、それをもとにした式も確認できないということ?
最後のまとめで
- 開発したばかりの機能を使用してテストを改善
- 1度に2つのテストが失敗したら、落ち込む
- テスト対象のオブジェクトの新機能を使用して、テストとコードとの結合度を削減
開発したばかりの機能>timesメソッドのこと?
timesメソッドが失敗していたら、さっきまでやったテストが無駄になる。これがリスクの受け入れか。
テストとコードとの結合度を削減はammontのプライベート化を指していそうだね。
うーん、ここもやっていることは単純だけど、意外と難解。
コードとテストで一歩一歩進んでいるけど、リスクはあるよってことなのかな。
なんとなく改善の動機が腑に落ちない。
単純に定数を一般化(10⇒Dollarオブジェクト)って考えはじめちゃだめなのか?