Skip to content

aizhanti/mini.tdd-vending-machine

Repository files navigation

TDD 自動販売機

This was created during my time as a Code Chrysalis Student

自動販売機の仕組みを作成することで、ペアプログラミングとテスト駆動開発を練習しましょう。

達成目標

このタスクでは次のことを行います:

  • テスト駆動開発を使って、ステートマシンを作成する。
  • コードを書く前にテストを書く練習をする。
  • SEAT パターンを使ってテストを書く練習をする。
  • 効果的なペアプログラミングの手法を練習する。

ユーザストーリー

  • 買い物客として、
  • 自動販売機が欲しい。
  • 結果として、商品を効率的に購入できるようになる。

状態

  • balance - コインを入れてまだ使用していない金額(残高)
  • till - 自動販売機内のコインと数のマップ
  • selectedRow - 選択した行があれば、その行を保存
  • selectedColumn - 選択された列があれば、その列を保存

振る舞い

以下は、実装すべきメソッドの提案にすぎないことを注意してください。おそらく、これらのメソッド以外にも、別のメソッドを追加した方がテストが容易になるでしょう。要確認:単一責任の原則、メソッドに 1 つのことだけを行わせるべきです。

  • insertCoin(denomination) - 自動販売機にコインを入れます。
  • changeReturn() - コンソールにコインのログを記録し、残高をリセットします。
  • pressButton('A'-'D') - 行を選択します。
  • pressButton(1-4) - 列を選択します。

説明

名前と価格を持ったお気に入りの製品からなる 4x4 の二次元配列として、自動販売機をモデル化します。例:

const juice = {name: `Apple Juice`, price: 350, count: 5};
const coffee = {name: "Tully's", price: 250, count: 7};

const inventory = [
  [juice, coffee, ..., ...],
  [..., ..., ..., ...],
  [..., ..., ..., ...],
  [..., ..., ..., ...],
]

ハッピーパス(デフォルトのシナリオ)は次のように進行する必要があります:

  1. コインを挿入
  2. 行を選択
  3. 列を選択
  4. 製品を出す(コンソールにログを記録する)
  5. 在庫の更新
  6. お釣りを出す

必要要件

  1. 残高がゼロの 場合、コインが挿入された 時にその後 残高が加算され、かつ コインの種類を保存する必要があります。
  2. 行が選択されていない 場合、行が選択された 時に、行の文字を保存して、コンソールにログを表示する必要があります。
  3. ある行を選択した 場合、十分な残高と在庫がある 時に、列が選択されます。
    1. その後 行と列をコンソールにログを出力する必要があります。
    2. "Here is your [item name]" というメッセージをログ出力する必要があります。
    3. そして、アイテム(商品)の在庫を 1 つ減らす必要があります。
    4. また、正しいお釣りを返します(お釣りのコインの種類と数を、コンソールにログ出力)
  4. 行と列が選択されている 場合、対象の列に在庫がない 時に、エラーメッセージをログに出力する必要があります。
  5. 行と列が選択されている 場合、選択されたアイテム(商品)を購入するための残高が不足している 時にその後 エラーメッセージをログ出力する必要があります。
  6. プログラムを起動した 場合、残高が読み込まれた 時にその後 残高を 0 とする必要があります。

注意してください:残高を計算してお釣りを返すには、コインの種類と数の両方を記憶しなければいけません

アンハッピーパス(上記以外の留意点)

少なくとも、すべての必要要件に対してテストを実装しなければいけませんが、これらのテストのみに限定すべきではありません。必要なだけテストを記述しましょう。

優れた TDD 開発者として、仕様外のエッジケースを見つけた場合は、PM(インストラクター)に期待される機能を尋ねる必要があります。

ペアプログラミング

この機会に、ピンポンペアプログラミングを練習しましょう:

  1. 左側のペアは、失敗するケースのテストを書きます。
  2. 右側のペアは、テストをパスするための最小限のコードを書きます。
  3. 右側のペアは、次のテストを書きます。
  4. 左側のペアは、テストをパスするコードを書きます。

リファクタリングすることを忘れないでください。そしてグリーンになった時(テストをパスした時)だけ、リファクタリングを行ってください!

ヒント:コンソールにログ出力されたものをテストしようとせず、代わりにメソッドをどのように組み立てて、お釣りや出したアイテム(商品)などのオブジェクトを、戻り値として返すか、その方法を考えましょう。これにより、戻り値に対して、テストを作成できるようになります。

セットアップ

yarn
yarn test

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published