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オブジェクト)って考えはじめちゃだめなのか?