😺

話題沸騰ポットに対して Property based testing を試してみる(4)沸騰/保温-状態遷移の実装を変更

2020/10/26に公開

はじめに

話題沸騰ポットに対して Property based testing を試してみる (3)沸騰/保温 - 状態遷移を考えるに引き続き
fast-checkを使ってProperty based testingを試しています。
題材として
テスト設計コンテストU-30クラスでテストベースに指定されている
「話題沸騰ポット要求仕様書 (GOMA‐1015型) 第7版にすることにしました.
fast-checkは状態をランダムウォークさせて失敗するテストケースを見つける方法も実装されてるみたいですのでそろそろ状態遷移を考えつつこの機能を試していきたいなと考えている今日この頃ですが。。。
今日はproperty-based-testingの話題ではなく、実装の修正中心の話になります

準備

こちらに今回実装したコードを配置してみました。
Nodejsの環境が手元にあれば、試すことができます。

git clone https://github.com/freddiefujiwara/goma-1015.git
cd goma-1015
npm i
npm test

_isOpen,connected等の状態を表すものをenum Stateにすべて置き換える

以前のとおり、今後は状態が複雑化するのでちゃんとStateで管理していきましょう
現状状態はoff,open/off,idel,open/onの4つの状態があり、
将来沸騰中、保温中がでてくるので先に定義しておきましょう

image.png

export enum State {
  OFF = -1,
  OFF_OPEN,
  ON_IDLE,
  ON_OPEN,
  ON_ACTIVE_BOIL,
  ON_ACTIVE_KEEP,
}

isOpenやthis._onで判別していたところをすべてStateをみて書き換えるようにします.
diffを取るとこんな感じです
image.png
結構変えている風ですが、基本は状態遷移をちゃんとswitch文で判別して
然るべき状態に遷移させているだけです

テストを通してみる

テストが通るまで頑張ってデバッグしましょう
image.png

基本実装を変えただけでテストコードはほとんど変更してません、
こういうリファクタリングのときにテストコードがあると本当に便利ですよね

最後に

次こそいよいよmodel-based-testingを実現させてみたいと思います
また、コードにもし間違いありましたらPull requestは大歓迎です。
長くなってしまいましたが 最後まで読んでいただきありがとうございました。

Discussion