Rubyのテストコード自動生成!レガシーコードをrspec-kickstarterで切り崩す

    RSpec絶賛勉強中! t-wadaさんの記事を参考にして写経してる。

    RSpecについての情報を探してネット上を徘徊していたら、 rspec-kickstarterというおもしろそうなツールを発見したので試す。

    rspec-kickstarterとは

    githubのREADMEによると、 既存コードからRSpecのスケルトンコードを自動生成するツールのようだ。

    • インストール
      gem install rspec-kickstarter
      

    つかってみる

    写経用教材をrspec-kickstarterにかけてみると・・・

    require 'spec_helper'
    require 'message_filter'
    

    describe MessageFilter do

    TODO auto-generated

    describe ‘#new’ do it ‘works’ do word = double(‘word’) result = MessageFilter.new(word) expect(result).notto benil end end

    TODO auto-generated

    describe ‘#detect?’ do it ‘works’ do word = double(‘word’) messagefilter = MessageFilter.new(word) text = double(‘text’) result = messagefilter.detect?(text) expect(result).notto benil end end

    end


    あっという間に自動生成。自動生成なのでテストがDRYではあるが、それでも素晴らしい。 いきなり最終回だ。

    テストのリズム

    オプション -f をつけると、 既存のspecコードに足りないメソッドのサンプルを追加してくれる。

    このオプションをつかうと、以下のようなTDDのリズムが考えられる。

    1. メソッドを定義
    2. メソッドに対応するスケルトンを生成し、テストを実装
    3. テスト失敗
    4. メソッド実装
    5. テスト成功

    普通ならば、このあとリファクタリングをする。

    まだ、お試しなので、もう少し使ってみて有用性を見極めてみる。

    一からスクラッチを書くコードよりも、レガシーコードにたいして絶大な効果がありそう。

    また、テストファイルをとりあえず生成することができるので、初めの一歩をkickするためだけの用途でも使えそう。