テスト駆動開発 の書籍を元に TypeScript で実装していきテスト駆動開発の素晴らしさを確認していく勉強会です。
基本的にはコンテナの中で実装をするので Docker が起動できる環境を用意しておいてください。
$ docker-compose build
開発で使用しているコマンドをこちらに記載してきます。
$ docker-compose run --rm node
コンテナ内で使用することを想定されているコマンド群です。
$ yarn run build
# output => ls ./dist
$ yarn run test
$ yarn run exec
勉強会で行った履歴をこちらにつらつらと記載して起きます
- ✨ 【第1章 仮実装】TODOリストの中で一番簡単に実装できなそうな times メソッドのテストを追加
- ♻️ 【第1章 仮実装】Dollar クラスを作成しコンパイルエラーを解消する
- ♻️ 【第1章 仮実装】テストがまずは通すことを優先して改修する
- ♻️ 【第1章 仮実装】リファクタリングを行い、重複を除去する
- 🐛 【第2章 明白な実装】Dollar の副作用の確認
- ♻️ 【第2章 明白な実装】Dollarの副作用の解消をする①
- ♻️ 【第2章 明白な実装】Dollarの副作用の解消をする②
- ✨ 【第3章 三角測量】equals メソッドのテストを実装しとりあえずテストが成功するまで実装する
- ♻️ 【第3章 三角測量】等値性比較のメソッドを実装
- ✨ 【第3章 三角測量】null との等値性比較のテストを追加
- ♻️ 【第3章 三角測量】null との等値性比較の実装
- ♻️ 【第4章 意図を語るテスト】オブジェクトの比較に変更
- ♻️ 【第4章 意図を語るテスト】よりイミュターブルな形にするため amout を private にする
- ✨ 【第5章 原則をあえて破るとき】 重複排除を行わず開発速度重視でフランを追加する
- ✨ 【第6章 テスト不足に気づいたら】 Dollar, Franc の重複を排除するためにまずは Money クラスを作成する
- ✨ 【第6章 テスト不足に気づいたら】 重複コード排除のため Money クラスに equals メソッドを追加する
- ✨ 【第7章 疑念をテストに翻訳する】Money から派生した Franc と Dollar は同じはずなのでそれの比較を追加する
- ✨ 【第8章 実装を隠す】 times の一般化手前まで実装する
- ✨ 【第9章 歩幅の調整】 Dollar と Franc のクラスを消すために Currency フィールドを追加する
- ✨ 【第9章 歩幅の調整】 Dollar, Franc が同じものであると判定するためにテストを修正する
- ✨ 【第10章 テストに聞いてみる】 times の一般化のためにまずは currency を追加する
- ✨ 【第10章 テストに聞いてみる】 サブクラスたちの times の実装の差異をなくすために times の一般化
- ✨ 【第10章 テストに聞いてみる】エラー時に詳細な情報がだせるように toString メソッドを追加
- ✨ 【第11章 不要になったら消す】 サブクラスがコンストラクタだけしかないので消す
- ✨ 【第12章 設計とメタファー】
$5 + 5 CHF
を達成するためにまずは簡単な$5 + $5
の実装から始める - ✨ 【第12章 設計とメタファー】為替の概念を Bank クラスに担わせる
- ✨ 【第12章 設計とメタファー】
$5 + 5 CHF
を実現するため plus メソッドは Expression(式)として返すようにする - ✨ 【第13章 実装を導くテスト】 計算結果を Sum クラスで返すようにする
- ✨ 【第13章 実装を導くテスト】 reduce メソッドで為替の変更ができるようにする
- ✨ 【第13章 実装を導くテスト】 どんな Expression が来ても動作するようにする
- ✨ 【第13章 実装を導くテスト】 クラスの明示的なチェックはポリモフィズムに置き換えられるので Expression に reduce
- ✨ 【第14章 学習用テストと回帰テスト】 Money の変換を行うために無理やりテストを通す
- ✨ 【第14章 学習用テストと回帰テスト】 為替レートを Money が知っていることになってしまったので Bank に移動させる
- ✨ 【第14章 学習用テストと回帰テスト】 文字列をユニオン型で持たせるようにし取り回しやすいようにする
- ✨ 【第14章 学習用テストと回帰テスト】 為替レートを管理するオブジェクトを作成する
- ✨ 【第14章 学習用テストと回帰テスト】 USD → USD 変換がうまくいってなかったので回帰テストを追加し対応する
- ✨ 【第15章 テスト任せとコンパイラ任せ】 換算処理が抜けていたため追加する
- ✨ 【第15章 テスト任せとコンパイラ任せ】 Money で取り回していた部分を Expression に寄せてポリモフィズムの恩恵を受け…
- ✨ 【第15章 テスト任せとコンパイラ任せ】 plus, times のメソッドが Expression で提供すべきなので改修する