LoginSignup
11
9

More than 5 years have passed since last update.

TDD入門自分用メモ-20141118

Last updated at Posted at 2014-11-17

Part 1-1

TODOListの作成

  • どのようなテストが必要となるか考える(まずテストから始める)
  • 複雑なものは小さく分解する
  • 途中で必要なものに気づいたらいきなりとりかかるのではなくTODOListに記入する
TODOList.md
レートが2:1の場合、$5+10CHF=$10
$5*2=10
amountのプライベート化
Dollarの副作用
Moneyの丸め処理

テストの作成

DollarTest.java

public void testMultiplication() {

  Dollar five = new Dollar(5);

  five.times(2);

  assertEquals(10, five.amount);
}

  • 作成したテストをコンパイルできるようにする
Dollar.java

public class Dollar {

  int amount;

  Dollar(int amount){}

  void times(int multiplier){}

}

レッド

  • コンパイルできるがテストは失敗する状態

TDDのサイクル

  1. テストを少しだけ作成する

  2. すべてのテストを実行し、失敗を確認する <- イマココ

  3. 小さな修正を行う

  4. テストを実行し、成功させる

  5. 重複を取り除くためにリファクタリングを行う

修正とリファクタリング

グリーン

  • テストが成功するように修正
Dollar.java

public class Dollar {

  int amount = 5 * 2;

  Dollar(int amount){}

  void times(int multiplier){}

}

リファクタリング

  • リファクタリングで実装していく
Dollar.java

public class Dollar {

  int amount;

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

  void times(int multiplier){
    amount *= multiplier;
 }

}

この章で行ったこと

  1. 必要なテストのリストを作成

  2. スタブを作成し、テストをコンパイルした

  3. まずテストをパスするようなコードを書いた

  4. リファクタリングした

Part 1-2

TDDのサイクル、詳細

  1. テストの作成: 操作、ストーリーから必要なインターフェースを考える

  2. すべてのテストを実行し、失敗を確認する

  3. 小さな修正を行う

  4. テストをパスさせる: バーをグリーンにすることが主となる

  5. リファクタリングを行う: 動作するきれいなコードを目指す

Dollarの副作用への対応

  • こういうテストをパスさせたい
DollarTest.java

public void testMultiplication() {
  Dollar five = new Dollar(5);
  five.times(2);
  assertEquals(10, five.amount);
  five.times(3);
  assertEquals(15, five.amount); // 30が返ってきてしまう 
}

  • テスト自体の変更
DollarTest.java

public void testMultiplication() {
  Dollar five = new Dollar(5);
  Dollar product = five.times(2); // times修正必要
  assertEquals(10, product.amount);
  product = five.times(3);
  assertEquals(15, product.amount);
}

  • Dollarのコンパイルを通す(仮実装)
Dollar.java

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

  • Dollarの修正(明白な実装)
Dollar.java

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

仮実装と明白な実装

  • 仮実装:定数を返しておき、定数を変数で徐々に置き換えてゆく
  • 明白な実装:実際の実装

この章で行ったこと

  1. 設計上の難点(副作用)をテストケースに変換した

  2. 仮実装でコンパイルを通す

  3. リファクタリングしてテストを通す

source

DollarTest.java

public class DollarTest {

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

Dollar.java

class Dollar {

    int amount;

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

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

11
9
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
11
9