Ruby Hack Challenge #4 カバレッジ特別回 資料
- 2. 事務連絡
• Gitter にお入りください
– https://gitter.im/rubyhackchallenge/Lobby
– URL やテキストの共有にお使いください
• この資料は slideshare にあります
– (あとでリンクにする)
• 今日の資料は github にあります
– https://github.com/ko1/rubyhackchallenge
/blob/master/JA/6_coverage.md
- 4. 今日の内容
• コードカバレッジを参考に Ruby のテストを書く
– カバレッジ:どのコードを実行したか・していないか
– 例:lib/irb/context.rb
– https://rubyci.s3.amazonaws.com/debian8-coverage/ruby-trunk/lcov/ruby/lib/irb/context.rb.gcov.html
青:実行されている行
赤:実行されていない行青:elseに
進んだ
赤:thenに
進んでない
- 6. 今日の内容
• コードカバレッジを参考に Ruby のテストを書く
– 適当にテストを書き足してみる
IRB.conf[:VERBOSE] = nil で
@verbose = nil にできるらしい
この条件下で verbose?
メソッドを呼ぶテスト
- 9. Ruby のビルドとテストのやり方(特急版)
• 依存関係を入れる(Debian 系の場合)
– sudo apt-get install git ruby autoconf bison gcc make zlib1g-dev
libffi-dev libreadline-dev libgdbm-dev libssl-dev lcov
• ソースを取ってくる
– git https://git.ruby-lang.org/ruby.git
• ビルドする
– cd ruby
– autoconf
– ./configure --prefix=`pwd`/local
– make
• テストを実行する
– make test-all
- 10. カバレッジの測定方法(C言語)
• 古いビルド結果を全部消す(重要)
– git clean -fxd
• ビルド時の configure にオプションをつける
– autoconf
– ./configure --prefix=`pwd`/local --enable-gcov
– make
• テストを実行する
– make test-all
• カバレッジを可視化する
– make lcov
– ブラウザで lcov-c-out/index.html を開く
- 11. カバレッジの測定方法(Ruby)
• 古いビルド結果を全部消す(重要)
– git clean –fxd
• ビルドは普通にやる
– autoconf
– ./configure --prefix=`pwd`/local
– make
• テストを COVERAGE=true 付きで実行する
– make test-all COVERAGE=true
– (coverage/index.html で可視化したものが見えるはず)
• オプション:LCOV でカバレッジを可視化する
– make lcov
– ブラウザで lcov-rb-out/index.html を開く
- 12. Ruby テストの構成
• Ruby にはいっぱいテストスイートがある
– make btest / make test-all / make test-spec
– 遠藤は test-all しかよく知らない
• make test-all の実態は test/ ディレクトリ
– test/ruby: コアのテスト
– test/(標準添付ライブラリ名): ライブラリのテスト
– 他にも雰囲気でいろいろ置いてある
• 特定のテストファイルだけを実行する方法
– make test-all
TESTS=test/irb/test_context.rb
– 指定しないと全部実行して遅いので、
テストを書き足したらそのファイルだけ実行してみるとよい
- 13. Ruby テストの書き足し方
• カバレッジを見て実行したい箇所の狙いをつける
• 試行錯誤を繰り返していろいろ考える
– ライブラリのコードを読解し、どうすれば実行できるか
– 既存テストを読解し、どのようなテストを書けば良いか
– テストを書いて実行し、当該箇所に徐々に迫っていく
• make test-all TESTS=テストファイル で、テストを書き
足したファイルだけ実行すると速い
• 毎回カバレッジをとっても良いが、当該箇所付近に出力
コードを突っ込んで print デバッグしたほうが速いかも
– (マニュアル化したやり方はない、基本的に気合い)