LoginSignup
1
1

More than 5 years have passed since last update.

TDD入門自分用メモ-20141119

Last updated at Posted at 2014-11-21

Part 1-3

Value Object

  • Dollar実装で使用しているパターン
  • オブジェクトを値として使用する
  • インスタンス変数の値をコンストラクタ内で設定した後は変化させないという制約
  • 別名参照のバグを防ぐ
  • Dollar5が別のDollar5オブジェクトと等価であることを示すためにequals()を実装する必要がある
  • equals()実装に合わせてhashCode()の実装も必要
TODOList.md
レートが2:1の場合、$5+10CHF=$10
amountのプライベート化
Moneyの丸め処理
equals()
hashCode()
  • 新しいテスト
DollarTest.java

    @Test
    public void testEquality(){
        assertTrue(new Dollar(5).equals(new Dollar(5)));
    }

  • 仮実装
Dollar.java

    public boolean equals(Object object){
        return true;
    }

  • テストパターンを増やす
DollarTest.java

    @Test
    public void testEquality(){
        assertTrue(new Dollar(5).equals(new Dollar(5)));
        assertFalse(new Dollar(5).equals(new Dollar(6)));
    }

Dollar.java

    public boolean equals(Object object){
        Dollar dollar = (Dollar)object;
        return amount == dollar.amount;
    }

  • nullやその他オブジェクトとの比較をどうするかという問題がでてきたのでTODOListに加えておく
TODOList.md
レートが2:1の場合、$5+10CHF=$10
amountのプライベート化
Moneyの丸め処理
hashCode()
nullとの等価性
オブジェクトとの等価性

三角測量云々の話がよく理解できてない...

この章で行ったこと

  1. 操作に対するテスト

  2. 操作の実装

  3. テストとリファクタリング

Part 1-4

変数のプライベート化

  • テストの修正
DollarTest.java

    @Test
    public void testMultiplication(){
        Dollar five = new Dollar(5);
        assertEquals(new Dollar(10),five.times(2));
        assertEquals(new Dollar(15),five.times(3));
    }

  • これでインスタンス変数をプライベートにすることができるようになった
Dollar.java

    private int amount;

この章で行ったこと

  1. テストの改善

  2. テストとコードの結合度を削減

DollarTest.java

public class DollarTest {

    @Test
    public void testMultiplication(){
        Dollar five = new Dollar(5);
        assertEquals(new Dollar(10),five.times(2));
        assertEquals(new Dollar(15),five.times(3));
    }

    @Test
    public void testEquality(){
        assertTrue(new Dollar(5).equals(new Dollar(5)));
        assertFalse(new Dollar(5).equals(new Dollar(6)));
    }
}

Dollar.java

class Dollar {

    private int amount;

    Dollar(int amount){
        this.amount = amount;
    }

    Dollar times(int multiplier){
        return new Dollar(amount * multiplier);
    }

    public boolean equals(Object object){
        Dollar dollar = (Dollar)object;
        return amount == dollar.amount;
    }
}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1