LoginSignup
5
3

More than 5 years have passed since last update.

Rubyのcoverageを使ってスクリプトのどの行が何回実行されたか調べる

Posted at

Rubyにはcoverageという標準ライブラリが存在しており、これを使用することでRubyのスクリプトを実行したときに、どの行が何回実行されているかを確認することが出来ます。FizzBuzzのコードを例に説明します。

fizzbuzz.rb
1.upto(100) do |n|
  if n % 3 == 0 && n % 5 == 0
    puts 'FizzBuzz'
  elsif n % 3 == 0
    puts 'Fizz'
  elsif n % 5 == 0
    puts 'Buzz'
  else
    puts n
  end
end

計測を行うコードですが Coverage.start で計測を開始して、Coverage.result で集計結果を取得することが出来ます。取得した値は [ファイルのパス, 各行の実行回数] の配列の形式で保存されています。

coverage.rb
require 'coverage'

Coverage.start
require_relative 'fizzbuzz'
result = Coverage.result

result.each do |filepath, count_list|
  puts '-' * 80
  count_list.zip(File.readlines(filepath)).each do |count, line|
    puts "#{count.to_i.to_s.rjust(10)}: #{line}"
  end
  puts '-' * 80
end

実行するとこんな感じで表示されます。

# FizzBuzzの実行結果
.
.
.
--------------------------------------------------------------------------------
         1: 1.upto(100) do |n|
       100:   if n % 3 == 0 && n % 5 == 0
         6:     puts 'FizzBuzz'
         0:   elsif n % 3 == 0
        27:     puts 'Fizz'
         0:   elsif n % 5 == 0
        14:     puts 'Buzz'
         0:   else
        53:     puts n
         0:   end
         0: end
--------------------------------------------------------------------------------

fizzbuzz.rbを実行したときに、どこが何回実行されたかを確認することが出来ました :smile:

参考サイト

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3