somemo programming etc.

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【TDD】テスト駆動開発入門15章完了

ようやく、複数種類の通貨の計算です。レートが2:1の場合、5ドル+10フラン=10ドルのテストを追加します。

5ドル+10フラン=10ドルのテスト

/**
 * レートが2:1の場合、5ドル+10フラン=10ドルのテスト
 */
public function testMixedAddition() {
    $five_dollars = Money::dollar(5);
    $ten_francs   = Money::franc(10);

    $bank = new Bank();
    $bank->addRate('CHF', 'USD', 2);

    $result = $bank->reduce($five_dollars->plus($ten_francs), 'USD');
    $this->assertEquals(Money::dollar(10), $result);
}

テスト内容どおりのコードです。

plusメソッドによって帰ってきた合計を表すSumクラスに、銀行が委譲しているreduceメソッド(換金)が存在しないので実装しました。

加数と被加数を換金してから返すように実装しました。今回は、これだけで終了です。

Javaの場合

使用されているMoneyやSumなどを使用している部分や戻り値にしている部分を、より抽象的?仕様的?にするために、インターフェースに寄せています。

その際に、式(Expression)に存在しないメソッド(plusなど)を使っているので、式に対してメソッドを追加しています。

phpでは、動的型付けになるので行いませんでしたが、静的型付け言語では明示的に抽象化できるのはいいところですね。