RBSをテストコードにする - スペクトラム で紹介したRaaPがいい感じに育ってきた。
RubyKaigiごっことして紹介スライドを作った。とくにしゃべる予定はない。
Coverage
大きなアップデートとしては、Coverage機能を追加し、デフォルトで有効にしたことだ。
CoverageはRubyの方ではなく、RBSのほうのCoverageだ。
引数
RaaPではランダムな挙動をベースにしているので、1回の動作につき引数生成に様々な選択がなされる。
- オプション引数はランダムにあったりなかったりする。
- rest引数は0個〜3個をランダムに生成する。
- Union型(
Integer | String
みたいなやつ)は1つだけをランダムに選択する。 - Optional型(
Integer?
みたいなやつ)はInteger
か?
(つまりnil)かをランダムに選択する。
これらの条件が複数重なったとき、本当に記述したRBSが使われているのか、書く意味があったのか、不安になってくる。
そこで、どの型を使用したのかCoverageを表示することによって安心感を得ることができる。
もしなかなか使用されないなら、試行回数を増やして確率を上げることもできる。
返り値
また、返り値はランダムではないにせよ、以下のような判定になる。
- Union型ならどれか一つにあてはまっていればよい
- Optional型なら、とある型か
nil
かのどちらかであればよい
RaaPでは型が間違っていたら失敗として教えてくれるが、範囲が広すぎて緩すぎる型になっていても失敗はしない。
返り値に書いた型が本当に意味のあるものだったか、全く使われていないなら削除も検討できる。