7章 りんごとみかん
FrancクラスとDollarクラスの比較
testEqaulity()に検証を追加
public void testEqaulity(){ assertTrue(new Dollar(5).equals(new Dollar(5))); assertFalse(new Dollar(5).equals(new Dollar(6))); assertTrue(new Franc(5).equals(new Franc(5))); assertFalse(new Franc(5).equals(new Franc(6))); //FrancとDollarの比較 assertFalse(new Franc(5).equals(new Dollar(5))); }
テストは失敗
- eqaulsメソッドは上位のMoneyクラスで、FlancもDollarも一緒に扱っているので失敗する
equalメソッド内で二つのオブジェクトを比較しないようにする
2つのオブジェクトのクラスを比較することで対応が可能
amountと、比較しているオブジェクトが同じクラスの場合に2つのMoneyは等しい
Money.equalメソッドを変更
public boolean equals(Object object) { Money money = (Money)object; return amount == money.amount && getClass().equals(money.getClass()); }
すごいかき方だよね?
この本でもコードについて、少しおかしいと
実際には混合通貨を行えるようにする必要がある
通貨をタスクに追加
より良い動機付けがない限り、これ以上設計を導入しない。これがリファクタリングのやめるポイントにもなるんだね、なるほどー。